我想知道 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())
之前可以更轻松地完成此检查。
你觉得怎么样?
最佳答案
参见http://code.google.com/p/google-web-toolkit/issues/detail?id=6228#c1 TL;DR:异步处理为太多的边缘情况、错误、困惑以及关于它应该如何工作的不同需求/愿望打开了大门。
执行
goTo
的事件不一定是需要在mayStop
中进行检查的那个。在这种情况下,如果它在执行goTo
之前进行检查(然后转换到mayStop
将返回null
的状态),然后在存在另一个具有未保存更改的事件的情况下,这将导致要求用户进行两次确认。
也可以听PlaceChangeRequestEvent
s 并有条件地调用setWarning
,而不是在mayStop
中进行检查。这样您就可以访问您要导航到的地方;但它将您的事件与地点及其到事件的映射结合起来(例如,列表事件可能会显示在桌面上的详细信息地点上,但不会在移动设备上显示);这是ActivityMapper
的责任s.
另外,不要忘记浏览器可以触发导航(用户在浏览器的历史记录中导航)。事实是:在网络上,用户处于控制之中。
总而言之,简单地执行goTo
可能更好(也更简单) s 并依赖mayStop
要求确认。 (如果有未保存的更改,该事件还可以禁用触发goTo
的按钮/链接,因此导航只能由其他事件触发)。
关于gwt - Activity.mayStop() 有多大意义?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9617062/