2012-08-23 34 views
3

在我的應用程序中,我有一個相對複雜的活動/地點。在活動開始時解析狀態(從歷史記號到模型)會導致一些服務器交互。 在用戶交互上,活動只更新模型的必要部分,因此可以保護一些服務器交互 - 活動/模型具有內部狀態。如何更改瀏覽器歷史記錄,而不必去/放置活動(gwt)

有沒有一種方法可以反映瀏覽器歷史中的狀態,而不必(重新)啓動活動? (History.newItem(token)也使活動的開始)

UPDATE 克里斯解‘近’的作品,但另一個問題上升:在我的UI我有一個重置按鈕(鏈接到的地方空令牌)。如果我點擊ui令牌更新正常,但現在重置按鈕不起作用。 gwt認爲它在同一個地方,所以它忽略了重置點擊。 在此之前,問題幾乎相同:令牌和位置沒有更改,因此重置按鈕也不起作用。 GWT將此記錄爲「要求返回到同一地點」

那麼有沒有辦法讓gwt重新啓動活動而不管地方等價?

回答

3

去一個新的地方,但有你的ActivityMapper返回相同的活動實例。這樣,活動不會重新啓動。
當地點從某些其他方面改變(例如瀏覽器歷史記錄)時,您必須找到更新活動的意思。例如參見GWT MVP updating Activity state on Place change

+1

thx托馬斯 - 我allways thougt「開始」是allways呼籲,但構造函數只有當我返回「新活動」才被調用。問題是我必須區分用戶輸入/更改的url(重新啓動活動)和用戶與界面交互(只更新令牌)。 – dermoritz

+1

經過一些研究和嘗試和錯誤我明白。事實上,如果mapper返回相同的活動,活動不會重新啓動是關鍵。重置按鈕也不起作用。但現在我擁有了所有的信息。 – dermoritz

2

有一個半的解決方案,雖然我不想推薦它,我想在這裏補充它 - 只是警告反對這種方案的缺點:

你可以添加通過調用History.newItem(token, false)來觸發歷史記錄。

這是一個半的解決方案,這是因爲:

  • 它正常工作(只要你正確地建立自己的代幣)。
  • 性能問題的一部分也解決了:將標記添加到歷史記錄時,活動不會重新開始。
  • 但是,如果用戶在歷史記錄中前後移動,則性能問題仍會存在(因爲這樣會再次觸發事件)。
+0

thx - 這正是我想要的:沒有用戶交互重播,但重新啓動前進/後退和URL輸入。 – dermoritz

+0

@dermoritz:如果你真的想要使用這個,請務必小心。請特別注意,'PlaceController.getWhere()'不會返回更新的地方! –

+0

多數民衆贊成在正確的,看到我的更新。現在狀態正確反映,但我的重置鏈接仍然無法正常工作。 – dermoritz