如何在不去往/开始活动的情况下更改浏览器历史记录(gwt)

时间:2012-08-23 11:28:27

标签: gwt

在我的应用程序中,我有一个相对复杂的活动/地方。在活动开始时解析状态(从历史令牌到模型)会导致一些服务器交互。 在用户交互中,活动仅更新模型的必要部分,因此保护一些服务器交互 - 活动/模型具有内部状态。

有没有办法在没有(重新)启动活动的情况下反映浏览器历史记录中的状态? (History.newItem(token)也会导致活动开始)

更新 克里斯的解决方案“差不多”有效,但另一个问题出现了:在我的ui中,我有一个重置按钮(指向空标记的地方的链接)。如果我点击ui周围令牌已更新,但现在重置按钮不起作用。 gwt认为它在同一个地方,所以它忽略了重置点击。 在此之前问题几乎相同:令牌和地点没有改变,因此重置按钮也不起作用。 GWT将此记录为“被要求返回同一地点”

那么有没有办法让gwt重新启动活动而不管地点等价?

2 个答案:

答案 0 :(得分:3)

转到新位置,但让ActivityMapper返回相同的活动实例。这样,活动就不会重新启动 当地点从其他平均值改变时(例如浏览器历史记录),您必须找到更新活动的方法。例如,请参阅GWT MVP updating Activity state on Place change

答案 1 :(得分:2)

有一个半解决方案,虽然我不想推荐它,但我想在此处添加它 - 只是为了警告这个解决方案的缺点:

您可以通过调用History.newItem(token, false)将标记添加到历史记录而不触发事件。

这是一个半解决方案,因为:

  • 它可以正常工作(只要你正确构建你的令牌)。
  • 还解决了部分性能问题:将令牌添加到历史记录时,不会重新启动活动。
  • 但是,如果用户在历史记录中前后移动,性能问题仍然存在(因为那时,事件将再次被触发)。