【问题标题】:What is need History.fireCurrentHistoryState() in GWT History?GWT History 中需要 History.fireCurrentHistoryState() 是什么?
【发布时间】:2011-10-19 00:11:11
【问题描述】:

您好,我正在开发一个 GWT 示例历史管理应用程序。 这是我的 onModuleLoad 代码。

public void onModuleLoad() {
    ContentPanel panel = ContentPanel.getInstance();
    if(History.getToken()!=null && History.getToken().length()==0)
    {
        History.newItem("first_page");
    }
    History.addValueChangeHandler(new HistoryHandler());
    RootPanel.get().add(panel);
    History.fireCurrentHistoryState();
}

在这我解雇了 History.fireCurrentHistoryState();触发当前的历史状态。 现在在我的 firstPanel 类中,有一个名为 Second Panel 的按钮,在该按钮上触发了历史令牌 second_page。

public FirstPanel() {
    VerticalPanel panel = new VerticalPanel();
    Button button2 = new Button("Second Panel");
    button2.addClickHandler(new ClickHandler() {
        public void onClick(ClickEvent event) {
            History.newItem("second_page");
        }
    });
    panel.add(button2);
    initWidget(panel);
}

但是这里不需要触发 History.fireCurrentHistoryState() ;再次。 简单的 histt​​ory.newItem 工作正常。

现在我想知道 History.fireCurrentHistoryState() 仅在模块加载时需要什么? 还有为什么在应用程序中第二次不需要它。?

【问题讨论】:

    标签: gwt gwt-history


    【解决方案1】:

    History.fireCurrentHistoryState() 调用您的历史处理程序,而实际上并未在浏览器历史堆栈中插入新的历史项,而 History.newItem(token) 确实将新的历史令牌插入到历史堆栈中。

    注意:如果您当前的令牌与新令牌相同(即重新加载同一页面),则浏览器不会将其插入历史堆栈。在这种情况下(当前令牌 == 新令牌)History.fireCurrentHistoryState()History.newItem(currentToken) 具有相同的效果。

    【讨论】:

    • 感谢您的回复。但我实际上想知道为什么它只需要在第一次可怕。如果“而 History.newItem(token) 确实将新的历史令牌插入到历史堆栈中。”它是如何触发的,因为我们没有调用 History.fireCurrentHistoryState()。希望我清楚我的观点。
    • 您必须触发它,因为您在页面加载后安装历史记录处理程序,并且您第一次没有收到历史记录更改事件。
    猜你喜欢
    • 2013-05-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-03-01
    • 1970-01-01
    • 2013-08-08
    • 1970-01-01
    • 2011-11-11
    相关资源
    最近更新 更多