【问题标题】:GWT History mechanismGWT 历史机制
【发布时间】:2012-09-10 05:13:48
【问题描述】:

我正在尝试向我的 GWT 应用添加历史记录功能。

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

除了当前位于堆栈顶部的令牌之外,它并没有真正存储有关状态的任何其他信息。这意味着我希望获得诸如弹出令牌之类的信息,这是我们刚刚离开的令牌,并且还可能获得是否按下后退或前进的信息。

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

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

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

有什么想法或想法吗?

【问题讨论】:

    标签: gwt history gwt-history


    【解决方案1】:

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

    【讨论】:

    • 如果你愿意,你可以在你的令牌中编码你的面包屑(我猜你不需要超过 4-5 个级别)。
    【解决方案2】:

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

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

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

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

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

    Activity & Places 模式为我提供了我需要的一切,而且我不必担心历史管理 - 我让浏览器来做。

    【讨论】:

      【解决方案3】:

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

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

      我并不是建议你改用 PlaceController 而不是原始的 History(尽管我相信你不会后悔),只是指出这是可能的。

      另请参阅How do I determine whether I am going "forward" or "backward" through my History in GWT?GWT 2.1 Place/Activity technique glitch: URL changes before navigation is confirmed

      【讨论】:

        猜你喜欢
        • 2011-05-30
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2013-05-27
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多