首页 > 解决方案 > 如何将参数发送到包含的组件?

问题描述

我有一个.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.zulControladorPadre

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

标签: javazk

解决方案


有一些解决方案

第一个是将您的第一个视图模型传递给第二个视图模型。

@init 的文档说:

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

所以在你的情况下:

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

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

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

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

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

全局命令可以解决问题,在我看来是最好的解决方案,但不要忘记如果该命令存在,所有活动的视图模型都将被检查,因此请确保您制作了唯一的全局命令,否则您会有一些不需要的行为。


推荐阅读