让我们在zk 8中假设一个简单的zul ......
<div width="100%" height="100%" viewModel="@id('vm') @init('com.example.MyVM')">
<div visible="@load(vm.child.isElementVisible)"/>
<div visible="@load(not vm.child.isElementVisible)"/>
<button onClick="@command('doSomething')"/>
</div>
现在我在VM中有一个简单的命令......
@Command
@NotifyChanges({"child.elementVisible", "someotherproperty"})
public void doSomething() {
this.child.setElementVisible( !this.child.isElementVisible() );
}
不幸的是,这根本不起作用。可见性没有变化。由于可见性的初始值工作正常,似乎只有更改通知似乎不起作用。
但是如果我向vm本身添加一个委托方法......
public boolean isElementVisible() {
return this.child.isElementVisible();
}
...并在我的zul中使用它......
<div visible="@load(vm.isElementVisible)"/>
<div visible="@load(not vm.isElementVisible)"/>
......它的效果非常好。有谁知道为什么这里的通知失败了?
答案 0 :(得分:1)
啊,似乎@NotifyChange不支持像...这样的子属性
@NotifyChanges({"child.elementVisible", "someotherproperty"})
相反,我们必须使用这样的东西......
BindUtils.postNotifyChange(null, null, child, "elementVisible");
......似乎确实奏效了。我们必须希望将另一件事作为新功能; - )
答案 1 :(得分:1)
由伟大的Subodh Joshi尝试这个来源http://zkframeworkhint.blogspot.it/2014/05/how-to-notify-single-item-or-record-or.html。
该概念在视图中使用:
<textbox value="@bind(mymodel.b)" onChange="@command('changeAnotherTextBox',data = mymodel)"/>
并在viewmodel中:
@Command
public void changeTextBox(@BindingParam("data") Data data) {
data.setB("Hariom=>" + data.getA());
BindUtils.postNotifyChange(null, null, data, "b");
}