好的,所以我已經在這方面花了太多時間,但它真的讓我感到困擾!所以,我有一個頁面上有一堆標籤。爲了讓事情易於管理,我希望將這些標籤中的每一個都帶到他們自己的ViewModel的.zul頁面中。爲了將主對象(錦標賽對象)從主頁面傳遞到所有支持頁面,我已經實現了EventQueue
。ZK - EventQueue可以工作,但數據不會令人耳目一新
問題是,無論何時觸發事件並更新錦標賽對象,即使ViewModel中的數據已更改,頁面也不會刷新其數據。我曾嘗試添加@NotifyChange
註釋但沒有成功。在調試時,我已經消除了額外的.zul。見下面的代碼。
tournamentsTab.zul:
<tabpanel apply="org.zkoss.bind.BindComposer" viewModel="@id('bcvm') @init('com.cannon.tnt.trm.mvvm.BeltClassViewModel')">
<vlayout vflex="1">
<grid model="@load(bcvm.tournament.beltClasses)" emptyMessage="No belt ranks created yet." vflex="1">
<columns>
<column label="Name" align="center" width="200px"/>
<column label="Description" align="center"/>
<column label="Delete" align="center" width="120px"/>
</columns>
<template name="model">
<row>
<textbox value="@bind(each.name)" width="95%" onChanging="@command('setStateEditing')"/>
<textbox value="@bind(each.description)" width="95%"
onChanging="@command('setStateEditing')"/>
<button label="Delete" onClick=""/>
</row>
</template>
</grid>
</vlayout>
<!--<include src="beltClassPanel.zul"/>-->
</tabpanel>
BeltClassViewModel.java:
public class BeltClassViewModel {
private EventQueue eq;
private Tournament tournament;
@Init
public void init() {
eq = EventQueues.lookup("tournamentQueue");
eq.subscribe(new EventListener() {
public void onEvent(Event event) throws Exception {
setTournament((Tournament) event.getData());
}
});
}
public Tournament getTournament() {
return tournament;
}
@NotifyChange("{tournament}")
public void setTournament(Tournament selectedTournament) {
this.tournament = selectedTournament;
}
}
正如我提到的,EventQueue
部分工作完美。該事件被觸發,然後由調用者在視圖模型上設置錦標賽對象的監聽器接收。問題是,引用的錦標賽對象沒有在UI中更新。我在getTournament()調用中設置了一個斷點,並驗證了被調用的唯一時間是頁面首次加載時的時間。
請幫助!!!我知道這些東西通常只是我忽略的一些愚蠢的東西。請證明我的白癡! :)
來吧StackOverflow!你幫助其他人! ;) – Lance
@NotifyChange語法看起來不對。它應該像'@NotifyChange(「錦標賽」)或'@NotifyChange({「錦標賽」})' –
請參閱...我告訴過你這是愚蠢的!謝謝,尤金!堆棧溢出岩石。 :) – Lance