如何将参数发送到包含的组件?

时间:2018-06-11 14:44:33

标签: java zk

我有.zul个文件index.zul。它包含另一个.zul文件Prueba1.zul。我使用的是zk7。

    <window border="normal" title="Test Send Argument" apply="org.zkoss.bind.BindComposer"
            viewModel="@id('vm') @init('com.test.ControladorPadre')">
        <include type="@load(vm.mapType)" src="Prueba1.zul"/>
....
    </window>
</zk>

<zk>
  <window border="normal" title="Controlador 1" apply="org.zkoss.bind.BindComposer"  zclass="z-window-popup"
         viewModel="@id('vm') @init('com.test.Controlador1')" >
        <button onClick="@command('doSort')" type="button" label="BT1" />
  </window>
</zk>

他们应用不同的视图模型。我想从Prueba1.zul发回参数,以便在index.zul中显示并在课程ControladorPadre中处理。

我尝试过并没有成功。我目前只知道一种方法是使用BindUtils.postGlobalCommand。我不确定这是否是一种好的处理方式,或者是否存在另一种方法来解决我的问题。

1 个答案:

答案 0 :(得分:1)

有一些解决方案

第一个是将第一个viewmodel传递给第二个viewmodel。

文档of @init说:

 viewModel="@id('vm') @init('org.zkoss.reference.developer.mvvm.databinding.InitVM', arg1='myValue')"

所以在你的情况下:

 viewModel="@id('vm2') @init('com.test.Controlador1', arg1=vm)"

如果你看起来很好,我改变了第二个vm的id因为你不想把你的zul与vm混淆。
Prueba1.zul中,vm也处于活动状态,您可以在那里加载(甚至保存)数据。

第二个:保存在vm和vm1中。

<textbox value="@load(vm.someText) @save(vm.someText) @save(vm1.someText)"/>

当然,有时你需要在命令之后传递它,然后这个选项就不起作用了。

Global-Command可以做到这一点,在我眼中是最好的解决方案,但不要忘记如果该命令存在,将检查所有活动的视图模型,所以请确保你做独特的全局命令或您有一些不受欢迎的行为。