如何在不放置/启动活动(gwt)的情况下更改浏览器历史记录
在我的应用程序中,我有一个相对复杂的活动/场所。在活动开始时解析状态(从历史标记到模型)会导致一些服务器交互。 在用户交互上,“活动”仅更新模型的必要部分,因此可以保护某些服务器交互-活动/模型具有内部状态 是否有方法在不(重新)启动活动的情况下反映浏览器历史记录中的状态?(如何在不放置/启动活动(gwt)的情况下更改浏览器历史记录,gwt,Gwt,在我的应用程序中,我有一个相对复杂的活动/场所。在活动开始时解析状态(从历史标记到模型)会导致一些服务器交互。 在用户交互上,“活动”仅更新模型的必要部分,因此可以保护某些服务器交互-活动/模型具有内部状态 是否有方法在不(重新)启动活动的情况下反映浏览器历史记录中的状态?(History.newItem(token)也会导致活动开始) 更新 Chris的解决方案“几乎”奏效,但另一个问题出现了:在我的ui中,我有一个重置按钮(指向带有空令牌的位置的链接)。如果我在ui周围单击,令牌会很好地更新
History.newItem(token)
也会导致活动开始)
更新
Chris的解决方案“几乎”奏效,但另一个问题出现了:在我的ui中,我有一个重置按钮(指向带有空令牌的位置的链接)。如果我在ui周围单击,令牌会很好地更新,但现在重置按钮不起作用。gwt认为它位于同一位置,因此忽略了重置单击。
在此之前,问题几乎是一样的:令牌和位置没有改变,因此重置按钮也不起作用。
GWT将此记录为“要求返回同一地点”
那么,有没有一种方法可以让gwt在不考虑位置等价性的情况下重新启动活动?转到一个新位置,但让您的
ActivityMapper
返回相同的活动实例。这样,活动就不会重新启动。但是,当位置从其他平均值(例如浏览器历史记录)更改时,您必须找到更新活动的平均值。例如,请参阅。有一个半解决方案,尽管我不想推荐它,但我想在这里添加它-只是为了警告此解决方案的缺点: 您可以通过调用
History.newItem(token,false)
将令牌添加到历史记录中,而无需触发事件
这是一个半解决方案,因为:
- 它工作正常(只要您正确构建令牌)
- 性能问题的一部分也得到了解决:将令牌添加到历史记录时,活动不会重新启动
- 但是,如果用户在历史记录中来回移动,性能问题仍然存在(因为这样,事件将再次触发)
PlaceController.getWhere()
不会返回更新的位置!没错,请参阅我的更新。现在状态已正确反映,但我的重置链接仍不起作用。@Demoritz:通过使用此解决方案,您正在更改位置等效的概念,这必须反映在它们的equals()实现中:使用默认的Object.equals()实现这种位置概念。这是合法的。缺点(再次提及)是,当调用PlaceController.goTo(…)
时,您总是会创建一个新的活动,但这是在这个解决方案中执行此操作的唯一方法。thx,我认为无论位置等价性如何,始终会调用mappers getActivity。“FilteredActivityMapper”使用位置等价。几个月前,我使用FilteredActivityMapper和cachingaactivitymapper在地点相等时重用活动,但这似乎是胡说八道-地点相等筛选器似乎一直处于启用状态?!