2012-03-08 25 views
2

我想知道是否有任何非平凡的用例爲com.google.gwt.activity.shared.Activity#mayStop方法。如何有意義的是Activity.mayStop()?

  1. com.google.gwt.place.shared.PlaceController.Delegate#confirm是一個阻塞的,所以你不能使用不同的Delegate,即使用回調。我真的不知道爲什麼這是以阻塞方式實現的,因爲GWT人總是說用戶交互應該異步處理。
  2. 總是調用mayStop方法。即使ActivityManager將返回相同的Activity並且UI不會更改。因此,活動必須檢查用戶是否存在未保存的更改以及地點是否發生變化,從而導致丟棄未保存的數據。我認爲在撥打placeController.goTo(new Place())之前可以更輕鬆地完成此項檢查。

您怎麼看?

回答

4
  1. 看到http://code.google.com/p/google-web-toolkit/issues/detail?id=6228#c1TL; DR:異步處理敞開了大門太多的優勢情況下,錯誤,混亂,以及不同的需求/希望爲它應該如何工作。

  2. goTo的活動並不一定是需要在mayStop中進行檢查的活動。在這種情況下,如果它在執行goTo(然後轉換到mayStop將返回null的狀態)之前進行檢查,則在存在另一個活動的情況下未保存的更改,這將導致兩個確認被詢問給用戶。
    也可以收聽PlaceChangeRequestEvent s並有條件地撥打setWarning,而不是在mayStop中進行支票。這樣你就可以訪問你正在導航的地方;但它會將您的活動與地點及其對活動的映射(例如,列表活動可能顯示在詳細信息位置在桌面上,但不在移動設備上顯示);這是ActivityMapper的責任。
    另外,不要忘記導航可以由瀏覽器觸發(用戶在瀏覽器的歷史中導航)。問題是:在網絡上,用戶處於控制之中。
    總而言之,簡單地做goTo s並依靠mayStop要求確認可能會更好(也更簡單)。 (該活動還可以在未保存的更改的情況下禁用觸發goTo的按鈕/鏈接,因此導航只能由其他活動觸發)。

+0

感謝您的回答:我沒有考慮到這一點,導航可以通過後退按鈕觸發。 – Peter 2012-03-09 11:06:30