3

您好,我正在开发 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() ;再次。简单的 history.newItem 工作正常。

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

4

1 回答 1

3

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

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

于 2011-08-03T12:36:26.537 回答