我认为我理解Wire
组件有一个基本问题,如果有人可以解释为什么它们使用Composer
和doAfterCompose()
- 方法以及为什么布线不起作用@command
- 方法中的(组件 - > NULL)(如从按钮点击onClick)。
我无法发布整个代码所以我只是粘贴了一部分工作区和一个工作的Java类
我使用MVVM
访问了一些values from ZUL-Components
。 java class
使用的generates some components dynamically
也包含数据库中的数据(in doAfterCompose()
- 方法)。
Szenario:gui显示并通过doAfterCompose()
动态创建了几个组件(行组件中的行组件+复选框)和Wire Component orgTypeRows
(类型行)。这很好。
但要访问结果,请单击搜索按钮,该按钮具有调用java方法onClick event "startSearch"
的{{1}}。在这个方法中,我想访问生成的组件(类型复选框)并验证已经检查了哪些框但是当我尝试访问此处的线组件时,Rows组件为NULL
以下是ZUL代码search.zul和Java代码search.java
这样不可能吗?我应该只使用startSearch()
中的按钮而不是doAfterCompose()
的监听器,但是如何访问@command
中的viewmodel,viewmodel的所有值都是NULL?
答案 0 :(得分:1)
我认为你的MVC和MVVM存在根本问题。
让我们从您展示的zul开始
我无法在zul中找到任何apply
属性,因此控制器或视图模型必须应用于另一个zul,因此我不知道您正在使用的是什么,MVC或MVVM。
属性的加载是MVVM方式。
现在我们去java课程
你混合了2个完全不同的东西
首先,扩展GenericForwardComposer
是一种MVC方式。
它甚至是旧版本,因为SelectorComposer
是最新的MVC控制器,您可以在其中注释必须完成的布线。
@Init
,@Command
=> MVVM
@doAfterCompose
,wiring => MVC
现在你说@Command
方法不起作用。你的意思是不要触发吗?
别忘了MVVM方式需要一个活页夹
初始化视图模型:
apply="org.zkoss.bind.BindComposer" viewModel="@id('vm') @init('yourPackage.YourClass')"
初始化MVC控制器:
apply="yourPackage.YourClass"
看到差异?
请在zk网站上阅读有关MVC和MVVM的文档
然后重构你的整个事情,如果你还有问题,请回答一个更好的问题,我们可以帮助你。