我在处理前进按钮时遇到问题。 基本上,当用户在页面上并且在没有保存的情况下进行更改时,按下向后或向前按钮会向他们显示提示和两个选项:离开或停留。
我已经实现了向后按钮,使用History.newItem(currentToken)选择保持在页面上运行良好 - 后退按钮仍然可以点击。
但是使用前进按钮,如果我使用History.newItem(currentToken),它会将它带到历史堆栈的前面,并且无法再单击前进按钮。 History.replaceItem(currentToken)导致同样的问题。
如何处理取消转发操作以便我保留在当前页面上,但仍然启用了转发按钮?
@Override
public void onValueChange(ValueChangeEvent<String> event) {
logger.info("back button pressed: " + event.getValue());
String evenVal = event.getValue();
String token = History.getToken();
AbstractPresenter presenter = sessionKiosk.getCurrentlyShowingPresenter();
if (presenter instanceof NSRCommonWorksheetPresenter && sessionKiosk.isDirty()) {
((NSRCommonWorksheetPresenter)presenter).setHistoryToken(event.getValue());
((NSRCommonWorksheetPresenter)presenter).showUnsavedChangesLeavingPageDialog();
}
else {
handleHistoryEvent(event.getValue());
}
}
显示对话框,当我点击停留在页面上时,会调用以下内容。
public void stayOnCurrentPage() {
if (eventMap.get(prevPage) != null) {
History.newItem(prevPage, false);
}
}
更新:基本上history.newItem(value)删除了使用前进按钮。还有其他方法可以取消活动吗?如果我什么都不做,那么页面会保留在我想要的位置,但网址仍会更新
else语句中的3个选项都不起作用。 感谢。
答案 0 :(得分:1)
您可以在不触及历史记录或代币的情况下取消活动。
更新:
从您的代码中可以看出,您没有拦截事件(后退/前进按钮),但让它通过,获取新令牌,然后在某些情况下强制返回上一个状态。
我建议使用Activities and Places模式,每个&#34;地点&#34;在您的应用中有一个相应的&#34;活动&#34;。您应用中的每项活动都会实施GWT Activity界面,其中包含mayStop()
方法。在用户导航离开应用中的特定位置之前,此方法称为,这样您就有机会警告用户并在必要时取消导航。
通常,此模式为历史机制提供了非常强大的支持,涵盖了许多用例。
如果您想自己支持历史记录机制,请查看PlaceChangeRequestEvent - 它可以让您警告试图远离应用中某个位置的用户。