1

我正在尝试将历史记录功能添加到我的 GWT 应用程序中。

据我了解,GWT 必须提供的基本历史支持确实是基本的……或者我应该说非常基本。

除了当前位于堆栈顶部的令牌之外,它并没有真正存储有关状态的任何其他信息。这意味着我希望得到像弹出令牌这样的信息,这是我们刚刚离开的那个,也可能会得到信息,无论是按下还是前进。

基本机制假定页面没有“高级”状态,即如果当前标记是“菜单”,那么我们从哪里进入这个菜单页面并不重要。但是,我想检查我们此时是否要离开特定页面,因为如果我们这样做了,那么我想先显示警告以保存数据。

此外,我的一些页面没有使用默认构造函数,而是从当前显示的页面中获取特定信息。这使我无法在一个集中的地方创建所有页面,并且应用程序中的所有按钮都只是在玩弄历史令牌。(如第 37 页所建议的那样。)

无论如何,我在这里很迷茫。我不确定要在不重写我的应用程序的情况下实现对后退/前进的基本支持要采取什么途径。

任何人的想法或想法?

4

3 回答 3

1

如果您需要跟踪您来自哪里,您可以轻松地自己完成:就像将令牌存储在全局状态中一样简单,并且仅在您对新令牌执行操作后才更新它。

仅供参考,PlaceController就是这样做的(使用Place抽象而不是基于字符串的标记)。它还会触发一个PlaceChangeRequestEvent,您可以setMessage在实际执行移动之前要求用户确认(PlaceChangeEvent)。

我不是建议你改用使用PlaceController而不是生的History(即使我相信你不会后悔),只是指出这是可能的。

另请参阅如何确定我在 GWT 中的历史记录中是“前进”还是“后退”?GWT 2.1 Place/Activity 技术故障:在导航确认之前 URL 发生变化

于 2012-09-18T09:35:29.503 回答
1

我假设您熟悉 GWT 活动和地点设计模式。它提供了您需要的所有机制,即活动中的令牌和 mayStop() 方法。

如果我有一个可能有未保存数据的视图,我总是实现一个从 mayStop() 调用的 hasChanges() 方法,以警告用户是否可能丢失任何更改。

请注意,您可以根据需要使令牌变得具体。令牌可能包含您需要的有关页面的任何信息,因此您可以对其进行解析和操作。就像是:

myPage.jsp/#CALENDAR:classId=900&option=teachers&menuItem=month

如果需要,您可以轻松地将前一页添加到您的令牌中。

活动和地点模式为我提供了我需要的一切,我不必担心历史管理——我让浏览器来做。

于 2012-09-18T00:48:55.903 回答
0

令牌机制是基本的,但没有什么能阻止您构建复杂的令牌来表示其他状态并解析它以稍后检索该状态。当然,它受到浏览器支持的令牌或 URL 大小的限制,但你仍然可以用它做很多事情。你是对的,它没有为更复杂的事情提供太多支持,比如面包屑和历史跟踪。实现这些需要一些编码。

于 2012-09-18T00:46:26.957 回答