java - 如何将参数发送到包含的组件?
问题描述
我有一个.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
. 我不确定这是否是一种很好的处理方式,或者是否存在另一种解决我的问题的方法。
解决方案
有一些解决方案
第一个是将您的第一个视图模型传递给第二个视图模型。
@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.zul
vm 中也处于活动状态,您可以在那里加载(甚至保存)数据。
第二个:保存在vm和vm1中。
<textbox value="@load(vm.someText) @save(vm.someText) @save(vm1.someText)"/>
当然,有时您需要在命令之后传递它,然后这个选项就不起作用了。
全局命令可以解决问题,在我看来是最好的解决方案,但不要忘记如果该命令存在,所有活动的视图模型都将被检查,因此请确保您制作了唯一的全局命令,否则您会有一些不需要的行为。
推荐阅读
- reactjs - 为 react redux 应用程序存储 API 密钥
- python - 如何计算循环函数的第一次重复?
- rx-java2 - 在自定义 RxJava 管道中实现背压
- c# - 加入两个列表并检查匹配的属性值并返回所需的数据
- python - 如何在 Python 中为家庭作业创建特定的维特比算法?
- postgresql - 使用 unix 域套接字从 docker 容器连接到 Postgresql 是不是很糟糕?
- vba - 在 MS Access 中刷新/关闭表单后如何停止“输入参数值”?
- ruby-on-rails - 从 Hubot 向本地 Rails 应用程序发送 HTTP 请求时出现 EHOSTUNREACH 错误
- javascript - 需要从 javascript 对象(树结构)构建多个目录值(字符串)
- javascript - 随机工作的锚上的 preventdefault() 函数