Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/sorting/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在不放置/启动活动(gwt)的情况下更改浏览器历史记录_Gwt - Fatal编程技术网

如何在不放置/启动活动(gwt)的情况下更改浏览器历史记录

如何在不放置/启动活动(gwt)的情况下更改浏览器历史记录,gwt,Gwt,在我的应用程序中,我有一个相对复杂的活动/场所。在活动开始时解析状态(从历史标记到模型)会导致一些服务器交互。 在用户交互上,“活动”仅更新模型的必要部分,因此可以保护某些服务器交互-活动/模型具有内部状态 是否有方法在不(重新)启动活动的情况下反映浏览器历史记录中的状态?(History.newItem(token)也会导致活动开始) 更新 Chris的解决方案“几乎”奏效,但另一个问题出现了:在我的ui中,我有一个重置按钮(指向带有空令牌的位置的链接)。如果我在ui周围单击,令牌会很好地更新

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

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

更新 Chris的解决方案“几乎”奏效,但另一个问题出现了:在我的ui中,我有一个重置按钮(指向带有空令牌的位置的链接)。如果我在ui周围单击,令牌会很好地更新,但现在重置按钮不起作用。gwt认为它位于同一位置,因此忽略了重置单击。 在此之前,问题几乎是一样的:令牌和位置没有改变,因此重置按钮也不起作用。 GWT将此记录为“要求返回同一地点”


那么,有没有一种方法可以让gwt在不考虑位置等价性的情况下重新启动活动?

转到一个新位置,但让您的
ActivityMapper
返回相同的活动实例。这样,活动就不会重新启动。

但是,当位置从其他平均值(例如浏览器历史记录)更改时,您必须找到更新活动的平均值。例如,请参阅。

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

您可以通过调用
History.newItem(token,false)
将令牌添加到历史记录中,而无需触发事件

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

  • 它工作正常(只要您正确构建令牌)
  • 性能问题的一部分也得到了解决:将令牌添加到历史记录时,活动不会重新启动
  • 但是,如果用户在历史记录中来回移动,性能问题仍然存在(因为这样,事件将再次触发)

thx thomas-i始终认为始终调用“start”,但仅当我返回“new activity”时才调用构造函数。问题是我必须区分用户输入/更改的url(重新启动活动)和与界面交互的用户(仅更新令牌)。经过一些研究和尝试,我理解了错误。事实上,如果mapper返回相同的活动,则活动不会重新启动这一事实是关键。重置按钮也不起作用。但是现在我已经准备好了所有的信息。thx-这正是我想要的:不需要重新启动用户交互,只需要在向前/向后和输入url时重新启动。@Demoritz:如果你真的想使用它,请非常小心。请特别注意,
PlaceController.getWhere()
不会返回更新的位置!没错,请参阅我的更新。现在状态已正确反映,但我的重置链接仍不起作用。@Demoritz:通过使用此解决方案,您正在更改位置等效的概念,这必须反映在它们的equals()实现中:使用默认的Object.equals()实现这种位置概念。这是合法的。缺点(再次提及)是,当调用
PlaceController.goTo(…)
时,您总是会创建一个新的活动,但这是在这个解决方案中执行此操作的唯一方法。thx,我认为无论位置等价性如何,始终会调用mappers getActivity。“FilteredActivityMapper”使用位置等价。几个月前,我使用FilteredActivityMapper和cachingaactivitymapper在地点相等时重用活动,但这似乎是胡说八道-地点相等筛选器似乎一直处于启用状态?!