您好我正在研究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();再次。 只是histtory.newItem工作正常。
现在我想知道在模块加载时只需要History.fireCurrentHistoryState()吗? 也是为什么在申请中不需要第二次。?
答案 0 :(得分:3)
History.fireCurrentHistoryState()
调用您的历史记录处理程序而不在浏览器历史记录堆栈中实际插入新的历史记录项,而History.newItem(token)
会将新的历史记录标记插入历史记录堆栈。
注意:如果您当前的令牌与新令牌相同(即重新加载相同的页面),则浏览器不会将此插入历史堆栈。在这种情况下(当前令牌==新令牌)History.fireCurrentHistoryState()
与History.newItem(currentToken)
具有相同的效果。