2010-02-18 127 views
1

GWT這裏是新手...使用UIBinder佈局GWT面板之間的談話

我正在使用UIBinder的方式來佈局一個應用程序,有點在GWT郵件示例的樣式。該應用程序開始在OnModuleLoad()方法內添加到RootLayoutPanel的DockLayoutPanel。該DockLayoutPanel有一個靜態的北方和南方靜,使用自定義窗口小部件中心等被定義:

public class BigLayoutWidget extends ResizeComposite { 
... 
} 

此自定義窗口小部件佈局使用BigLayoutWidget.ui.xml,這又由TabLayoutPanel的(3個標籤頁) ,其中第一個包含一個SplitLayoutPanel,分爲WEST(Shortcuts.ui.xml)和CENTER(Workpanel.ui.xml)。快捷方式又由一個StackLayoutPanel和3個堆棧組成,每個堆棧都在自己的ui.xml文件中定義。

我想單擊某個快捷方式的單個堆棧中的事件以更改Workpanel的內容,但到目前爲止,我只能夠在同一個類中操作小部件。使用最簡單的情況下,我無法在快捷方式中單擊按鈕來清除Workpanel的內容或使WorkPanel不可見。

的幾個問題...

  1. 是階級的ResizeComposite正確的類型來擴展這個?我遵循從TopPanel,MailList等的Mail例子的方法,所以也許不是?
  2. 我該如何使這些點擊操縱他們不居住的面板的內容?
  3. 聽衆不再推薦處理事件嗎?我認爲我在編譯過程中看到過一些地方使用了ClickHandlers,並且點擊監聽器「訂閱」方法已被棄用(我大多使用@UiHandler註釋)
  4. 是否有一種簡單的方法來獲取特定元素的句柄在我的應用/頁面? (應用UI.XML文件中的「ID」字段會生成棄用警告)。我正在尋找像document.getElementById()這樣的東西,它讓我能夠處理特定的元素。如果存在,我如何設置元素上的句柄/ ID,然後如何通過名稱/ ID調用該元素?

請注意,我有佈局本身很好釘;這是從一個ui.xml模塊化面板到下一個我無法完全獲得的交互。

在此先感謝。

回答

4
  1. 如果你沒有爲調整事件的使用不是僅僅使用Composite
  2. 你想要的是什麼,GWT開發者稱爲消息總線(如HandlerManager實現)。您可以在Google I/O 2009的Ray Ryan廣泛討論的內容(例如GWT Google Group,僅搜索'mvp')中得到一個很好的解釋,其中可以找到here。基本上,您在該消息總線上「廣播」一個事件,然後一個Widget監聽該事件,獲取該消息並執行其操作。
  3. 是的,*處理程序是當前處理事件的方式 - 使用基本相同,因此遷移不應該是一個問題(docs)。他們改變了它,以便將來可以引入自定義字段,而不會破壞現有代碼。
  4. 如果您已經爲任何DOM元素設置了id(對於小工具我使用someWidget.getElement().setId(id),通常與DOM.createUniqueId()結合使用),您可以通過GWT.get(String id)得到它。你會得到一個RootPanel,你必須把它投到正確的Widget類 - 正如你可以看到它可以得到一個'hackish'(如果你通過該ID改變Widget的類型?例外,或更糟糕),所以我建議堅持使用MVP(見第一點)並通過消息總線進行通信。但是請記住,有時它也是很好的聚集 - 並非一切都通過消息總線:)

底線是,我建議你擁抱MVP(和History)儘快處理 - 這讓GWT開發更容易,更不麻煩:)(我從經驗中知道,隨着時間的推移,代碼開始看起來像一場噩夢,如果你不把它分成演示文稿,視圖等)