我想知道com.google.gwt.activity.shared.Activity#mayStop
方法是否存在任何非常重要的用例。
com.google.gwt.place.shared.PlaceController.Delegate#confirm
是阻止的,因此您无法使用其他使用回调的Delegate
。我真的不知道为什么这是以阻塞方式实现的,因为GWT人总是说应该异步处理用户交互。mayStop
方法。即使ActivityManager
返回相同的Activity
并且UI也不会更改。因此,活动必须检查用户是否有未保存的更改以及是否更改地点确实会导致丢弃未保存的数据。我认为在调用placeController.goTo(new Place())
之前可以更轻松地完成此检查。您怎么看?
答案 0 :(得分:4)
请参阅http://code.google.com/p/google-web-toolkit/issues/detail?id=6228#c1 TL; DR:异步处理为太多边缘情况,错误,混淆以及不同的需求/愿望打开了大门。
执行goTo
的活动不一定是需要在mayStop
中进行检查的活动。如果是,那么如果它在执行goTo
之前进行检查(然后转移到mayStop
将返回null
的状态),那么在这种情况下还有另一个未保存的更改的活动,这将导致向用户询问两个确认
也可以收听PlaceChangeRequestEvent
并有条件地拨打setWarning
,而不是在mayStop
中进行检查。这样您就可以访问您要导航到的地方;但它将您的活动与地点相关联,并将其映射到活动(例如,列表活动可能会显示在桌面上的详细信息位置上,但不会显示在移动设备上);这是ActivityMapper
的责任
此外,不要忘记浏览器可以触发导航(用户在浏览器的历史记录中导航)。问题是:在网络上,用户处于控制之中
总而言之,简单地执行goTo
并依靠mayStop
要求确认可能更好(也更简单)。 (如果有未保存的更改,活动还可以禁用触发goTo
的按钮/链接,因此导航只能由其他活动触发。)