我有.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
。我不确定这是否是一种好的处理方式,或者是否存在另一种方法来解决我的问题。
答案 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可以做到这一点,在我眼中是最好的解决方案,但不要忘记如果该命令存在,将检查所有活动的视图模型,所以请确保你做独特的全局命令或您有一些不受欢迎的行为。