2

我想知道该com.google.gwt.activity.shared.Activity#mayStop方法是否有任何重要的用例。

  1. com.google.gwt.place.shared.PlaceController.Delegate#confirm是一个阻塞的,所以你不能使用不同的Delegate,即使用回调。我真的不知道为什么这是以阻塞方式实现的,因为 GWT 的人总是说用户交互应该异步处理。
  2. mayStop方法总是被调用。即使ActivityManager返回相同Activity并且 UI 不会改变。因此,活动必须检查例如用户是否有未保存的更改,以及位置更改是否真的会导致丢弃未保存的数据。我认为在调用之前可以更轻松地完成此检查placeController.goTo(new Place())

你怎么看?

4

1 回答 1

4
  1. 请参阅http://code.google.com/p/google-web-toolkit/issues/detail?id=6228#c1 TL;DR:异步处理为太多的边缘情况、错误、混乱和不同的需求打开了大门/希望它应该如何工作。

  2. 进行的活动goTo不一定是需要签入的活动mayStop。在这种情况下,如果它在执行之前进行检查goTo(然后转换到mayStop将返回的状态null),那么在存在另一个未保存更改的活动的情况下,这将导致向用户。
    也可以收听PlaceChangeRequestEvents 并有条件地调用setWarning,而不是进行 check in mayStop。这样你就可以访问你正在导航的地方;但它将您的活动与地点及其与活动的映射相结合(例如,列表活动可能显示在详细信息地点在台式机上,但不在移动设备上);这是s的责任ActivityMapper
    另外,不要忘记导航可以由浏览器触发(用户在浏览器的历史记录中导航)。问题是:在网络上,用户处于控制之中。
    总而言之,简单地执行goTos 并依靠mayStop请求确认可能会更好(也更简单)。goTo(如果有未保存的更改,该活动还可以禁用按钮/链接触发,因此导航只能由其他活动触发)。

于 2012-03-08T12:32:27.067 回答