當一個屏幕有多個交互的Ajax控件,並且你想控制組件對這些控件作出反應的可見性(這樣你只顯示在任何給定情況下有意義的東西),手動調用target.addComponent()
你想更新變得越來越繁瑣,而且不是很好維護。檢票和複雜的Ajax場景
最後,onClick
和onUpdate
網絡的回調可以達到在屏幕上添加新組件比預期難得多的地步。
什麼是常用的策略(或甚至圖書館,如果這樣的事情存在),以避免這種複雜性的積累?
更新:感謝您的回答,我發現它們都非常有用,但我只能接受一個。抱歉。
當一個屏幕有多個交互的Ajax控件,並且你想控制組件對這些控件作出反應的可見性(這樣你只顯示在任何給定情況下有意義的東西),手動調用target.addComponent()
你想更新變得越來越繁瑣,而且不是很好維護。檢票和複雜的Ajax場景
最後,onClick
和onUpdate
網絡的回調可以達到在屏幕上添加新組件比預期難得多的地步。
什麼是常用的策略(或甚至圖書館,如果這樣的事情存在),以避免這種複雜性的積累?
更新:感謝您的回答,我發現它們都非常有用,但我只能接受一個。抱歉。
那麼,我們在這裏講幾個組件?十?二十?數百?
對於最多二十個或關於這個,你可以有一個狀態控制器來控制哪些組件應該被顯示。此控制器設置組件模型的可見字段,並且始終將所有組件添加到由控制器處理的請求中。您只需將組件ajax事件重定向到控制器句柄方法。
對於真正大量的組件來說,爲了獲得良好的性能,負載太重,您可以使用jQuery等javascript庫來進行顯示並隱藏客戶端的內容。
您可以添加結構組件,例如WebMarkupContainer
s,當您將其添加到AjaxTarget時,它所包含的所有內容也將得到更新。這使您可以在一行中更新組件組。
在Wicket 1.5中有一個事件總線。每個組件都有onEvent(Object payload)方法。使用component.send(),您可以廣播事件,並且每個組件都可以檢查有效負載(例如UserJoinedEvent對象)並決定是否要參與當前的Ajax響應。請參閱http://www.wicket-library.com/wicket-examples/events/進行簡單演示。
這聽起來很有希望。 – biziclop 2011-06-13 14:58:02
我目前使用某種修改的Observer-Pattern來模擬Wicket 1.4中的事件總線。
我的頁面充當可觀察的觀察者,因爲我的組件不相互認識,並且在多個頁面的不同組合中重用。每當一個組件接收到一個Ajax事件時,也會影響其他組件,它會在其頁面上調用一個事件對象和ajax目標的方法。頁面調用所有爲這類事件註冊自己的組件的類似方法,並且每個組件可以根據提供的事件對象決定是否以及如何反應,並可以將它自己附加到目標上。
同樣的可以通過使用檢票訪問者存檔。我不知道哪一個更好,但我認爲這主要是品味的問題。
當我創建用於頁面組件我傾向於將它們添加到組件數組:
Component[] pageComponents = {
new TextField<String>("Field1"),
new TextField<String>("Field2"),
new TextField<String>("Field3")
}
作爲檢票1.5的附加功能採取陣列參數[1]。因此元素可以添加到頁面或目標是這樣的:
add(pageComponents);
target.add(pageComponents);
組件然後可以在此基礎上要刷新組合在一起。
我不認爲你應該有一個屏幕上遠遠超過與20個元件反正,所以這是我在這裏瞄準最大。 – biziclop 2011-06-11 20:21:11