Events ZK-EventQueue正在工作,但数据未刷新
好吧,我已经在这上面花了太多时间了,但这真的让我很烦!所以,我有一个页面,上面有一堆标签。为了便于管理,我想将这些选项卡中的每一个都转换为自己的.zul页面,并带有自己的ViewModel。我实现了一个Events ZK-EventQueue正在工作,但数据未刷新,events,data-binding,zk,Events,Data Binding,Zk,好吧,我已经在这上面花了太多时间了,但这真的让我很烦!所以,我有一个页面,上面有一堆标签。为了便于管理,我想将这些选项卡中的每一个都转换为自己的.zul页面,并带有自己的ViewModel。我实现了一个EventQueue,以便将主对象(锦标赛对象)从主页传递到所有sup页面 问题是,每当触发事件并更新锦标赛对象时,页面将不会刷新其数据,即使它在ViewModel中已更改。我尝试添加@NotifyChange注释,但没有成功。在调试过程中,我消除了额外的.zul。请参阅下面的代码 tournam
EventQueue
,以便将主对象(锦标赛对象)从主页传递到所有sup页面
问题是,每当触发事件并更新锦标赛对象时,页面将不会刷新其数据,即使它在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>
正如我提到的,EventQueue
部分工作得非常好。事件被激发,然后由调用在视图模型上设置锦标赛对象的侦听器接收。问题是,UI中未更新引用的锦标赛对象。我已经在getTournament()调用中设置了一个断点,并验证了唯一被调用的时间是页面首次加载时
请帮忙我知道通常这些事情都是我忽略的愚蠢的事情。请证明我的白痴!:) 我想您需要手动发布通知,您可以尝试以下方法:
public void onEvent(Event event) throws Exception {
setTournament((Tournament) event.getData());
BindUtils.postNotifyChange(null, null, BeltClassViewModel.this, "tournament");
}
尤金发现了问题。一个简单的错误。我有
@NotifyChange({touring}”)
,而它本应该是@NotifyChange({“touring})
。谢谢,尤金和堆栈溢出 来吧!你帮助别人!;)@NotifyChange语法似乎是错误的。它应该像@NotifyChange(“锦标赛”)
或@NotifyChange({“锦标赛”})
看……我告诉过你这是件愚蠢的事!!!谢谢你,尤金!堆垛溢流岩石。:)
public void onEvent(Event event) throws Exception {
setTournament((Tournament) event.getData());
BindUtils.postNotifyChange(null, null, BeltClassViewModel.this, "tournament");
}