子对象的ZK 8 MVVM绑定属性 - 没有更改通知?

时间:2016-09-15 13:13:08

标签: java mvvm zk

让我们在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)"/>

......它的效果非常好。有谁知道为什么这里的通知失败了?

2 个答案:

答案 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");
    }