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