跳到主要內容

發表文章

目前顯示的是 4月, 2016的文章

ZK 教學 - 瀏覽器頁籤 (tab) 被關掉後進行處理

如果你想要在 browser tab 關掉時去執行一些應用程式邏輯,例如清理資料等等。我們可以傾聽 browser tab 關掉的事件,這件事等同於 ZK 的 desktop 被移除。 ZK 提供一個 DesktopCleanup listener讓你可以傾聽任何一個 desktop 被移除的事件,所以只要發現你所關注的那一頁的 desktop 被移除了,那就是該 tab 被關掉了,你可以在該 listener 中實作你的應用程式邏輯。範例如下: import org . zkoss . zk . ui . Component ; import org . zkoss . zk . ui . Desktop ; import org . zkoss . zk . ui . select . SelectorComposer ; import org . zkoss . zk . ui . select . annotation . Listen ; import org . zkoss . zk . ui . select . annotation . Wire ; import org . zkoss . zk . ui . util . DesktopCleanup ; import org . zkoss . zul . Div ; public class CloseComposer extends SelectorComposer < Component > { @Wire Div root ; @Override public void doAfterCompose ( Component comp ) throws Exception { super . doAfterCompose ( comp ); //or register in zk.xml getPage (). getDesktop (). addListener ( new MyDesktopCleanupListener ()); } @Listen ( "onClick = #exi

ZK 教學 - 常見錯誤用法 05 - 用 @NotifyChange 通知 ListModel 改變

以 MVVM 方法開發時,我們通常必須要用 @NotifyChange 來通知 ZK ViewModel 中的某個特定 property 更改了,這時 ZK 會重新載入該 property 去更新畫面。但是若是使用 ZK 提供的 ListModel 的實作物件則有例外 (e.g. ListModelList ),因為 ZK 元件都會傾聽 ListModel 的變動,因此如果你改變其內容,元件都會知道並只 render 差異的部分,並不需要被通知。 這時若是加上 @NotifyChange 有什麼壞處呢?它反而會使 ZK 重新載入整個 ListModel 並 re-render 其中所含有的資料,如此一來,比起元件內建的機制只 render 差異部分還來得更沒效率。