我正在開發一個GWT應用程序(我對GWT相當陌生,所以這是最佳實踐的要求;我還沒有在SO或其他地方找到任何相關的答案)在需要時間軸的地方。此時間線(帶有說明,標籤,交互句柄和圖表)位於其自己的容器中(Panel
)。在GWT頁面中重繪容器或單個動態元素?
[<] [now] [>] // Interaction (navigation)
2007 2008 2009 2010 // Labels
| | | |
+ Group 1 // Collapsible groups
- Group 2
Item 2a ===== == // Item with plots (plots are wrapped in container per Item)
Item 2b ===== === =
-Group 3
Item 3a ===
Item 3b ===
現在,當用戶的瀏覽時間線(使用按鈕向前或向後),我需要重新計算佈局的一些元素:
- 標籤需要重新計算/重新定位
- 地塊需要重新計算/重新定位。繪圖基於一組
Timeslot
元素(擴展Widget
,屬性dateStart
和dateEnd
),這些元素已經與Item
相關,其與Group
有關。
可摺疊面板爲DisclosurePanel
s。
至於我可以告訴大家,我現在已經爲處理導航兩種選擇:
- 我可以
clear()
容器板,做一個完整的重繪。爲此,我需要保留所有組的狀態(摺疊/展開)。 (順便說一句,組和項目在整個期間都是靜態的!)這會給一個大的重繪。 - 我可以讓劇情容器(每個
Item
都有自己的TimeslotContainer
這是一個FlowPanel
)持有其所有Timeslot
個引用,然後讓每一個TimeslotContainer
重繪自身(即,過濾器和位置相關的Timeslot
S)基於當前時間跨度。這將給幾個小的重繪(每Item
每擴展Group
一個),其優點是,將保留,從而保持其自己的狀態。
我傾向於採用第二種解決方案。但是有沒有這方面的最佳做法?我是否缺少一些常見的陷阱?
我喜歡你的方法。 只有3條評論: - 爲什麼你沒有使用GWT的EventBus之一(http://google-web-toolkit.googlecode.com/svn/javadoc/latest/com/google/gwt/event/shared/EventBus .html)的實現(即SimpleEventBus)?您可以將它們用作TimeslotContainer的本地EventBus。 - 如果您的buildFromStore()方法在檢索包含/父容器的大小上進行depdends,那麼您可能會遇到問題並且必須將實際佈局推遲到最後(使用Scheduler.get()。scheduleDeferred())。 - 您也可以實現RequireResize接口來調整事件大小。 –
@Ümit好問題! 1)是的,使用現有的「EventBus」是有意義的。不過,我現在只需要這個功能,並且在解決方案插入到現有項目(我們已經使用增強的EventBus)時將重寫這些代碼。 2)和3)實際的尺寸和位置按百分比設置,因此根據容器通過CSS佈置。因此,我能夠做到這一切,沒有任何鉤子調整大小處理程序等(我敢打賭,這是什麼使最終這麼簡單:)) – jensgram
感謝您的更新。我還喜歡尺寸爲百分比(流體/柔性設計)。然而不幸的是有時候這是不可能的。例如,如果您使用Google可視化圖表,則需要明確的像素大小,並且這些必須動態計算。我遇到了很多麻煩,直到我偶然發現[HeaderPanel]的代碼(http://www.google.com/codesearch#A1edwVHBClQ/user/src/com/google/gwt/user/src/com/google/gwt/user/client/ui/HeaderPanel的.java&q = HeaderPanel%20package:HTTP://google-web-toolkit%5C.googlecode%5C.com&type=cs)。只是爲了記錄,如果你碰到相同的問題;-) –