我正在尝试向我的GWT应用程序添加历史功能。
据我所知,GWT必须提供的基本历史支持确实是基本的.或者我应该说是非常基本的。
除了当前位于堆栈顶部的令牌之外,它实际上不存储任何关于状态的其他信息。这意味着,我希望得到信息,比如弹出令牌,这是我们刚刚留下的信息&也可能得到信息,无论是后退还是前进。
基本机制假设页面不存在“高级”状态,也就是说,如果当前令牌是“菜单”,那么我们从哪里到这个菜单页面并不重要。但是,我想检查一下我们现在是否要离开一个特定的页面,因为如果我们离开了,那么我想先显示一个保存数据的警告。
此外,我的一些页面没有使用默认构造函数,而是从当前显示的页面中获取特定信息。这使我无法在一个集中的地方创建所有页面,而应用程序中的所有按钮都只是在玩历史标记。(例如,如第37页所建议的这里。)
不管怎样,我在这里很迷茫。我不知道在不重写我的应用程序的情况下,要实现基本的后退/转发支持,该走哪条路。
有什么想法或想法吗?
发布于 2012-09-18 09:35:29
如果您需要跟踪您来自何处,您可以轻松地自己进行跟踪:它就像将令牌存储在全局状态中一样简单,只有在对新令牌进行操作之后才能更新它。
FYI,PlaceController就是这样做的(使用Place抽象而不是基于字符串的令牌)。它还会触发一个PlaceChangeRequestEvent,您可以在该setMessage上请求用户在实际执行移动(PlaceChangeEvent)之前进行确认。
我并不是建议您转而使用PlaceController而不是原始的History (尽管我确信您不会后悔),只是指出这是可能的。
发布于 2012-09-18 00:48:55
我假设您熟悉GWT活动和场所设计模式。它提供了您需要的所有机制,即活动中的令牌和mayStop()方法。
如果我有一个可能有未保存数据的视图,我总是实现从mayStop()调用的一个mayStop()方法,如果可能丢失任何更改,就警告用户。
请注意,您可以使您的令牌特定于您的需要。令牌可能包含有关所需页面的任何信息,因此您可以解析它并对其执行操作。类似于:
myPage.jsp/#CALENDAR:classId=900&option=teachers&menuItem=month
如果需要,可以轻松地将前一页添加到令牌中。
about &Place模式为我提供了我所需要的一切,我不需要担心历史管理--我让浏览器来做。
发布于 2012-09-18 00:46:26
令牌机制是基本的,但是没有什么可以阻止您构建一个复杂的令牌来表示附加状态,并在以后解析它以检索该状态。当然,它受到浏览器支持的令牌或URL大小的限制,但是您仍然可以使用它做很多事情。您说得对,它没有为更复杂的事情提供太多支持,比如面包屑和历史跟踪。要实现这些功能,需要进行一些编码。
https://stackoverflow.com/questions/12468553
复制相似问题