在 @command 方法 (MVVM) 中无法访问 ZK Wire 组件或无法访问视图模型(在 Compose MVC 之后)
ZK Wire Components are not accessible in @command Method (MVVM) or viewmodel is not accesible (doAfterCompose MVC)
我想我在理解 Wire
组件时遇到了一个根本问题,如果有人可以解释为什么它们使用 Composer
和 doAfterCompose()
-方法以及为什么接线会这样'在 @command
方法中无法工作(组件 -> NULL)(就像按钮的 onClick)。
我无法 post 整个代码,所以我只是粘贴了一个有效的 zul 和一个有效的 Java Class
我用 MVVM
访问了一些 values from ZUL-Components
。 java class
也用于 generates some components dynamically
数据库中的数据(in doAfterCompose()
-方法)。
Szenario:显示了 gui,并通过 doAfterCompose()
动态创建了几个组件(行组件 + 行组件中的复选框)和 Wire Component orgTypeRows
(类型行)。效果不错。
但要访问结果,您需要单击具有 onClick event "startSearch"
的搜索按钮,该按钮会调用 java 方法 startSearch()
。在这种方法中,我想访问生成的组件(Type Checkbox)并验证哪些框已被选中,但是当我尝试访问此处的 wire 组件时,Rows Component 为 NULL
这是 ZUL 代码 search.zul and the Java-Code search.java
这不可能吗?我应该只为 doAfterCompose()
中的按钮而不是 @command
中的按钮使用侦听器,但是如何访问 doAfterCompose()
中的视图模型,其中视图模型的所有值都是 NULL?
我认为您在 MVC 和 MVVM 方面存在根本性问题。
让我们从你展示的zul开始。
我在 zul 中找不到任何 apply
属性,因此必须在另一个 zul 中应用控制器或视图模型,所以我不知道您使用的是 MVC 还是 MVVM。
属性的加载是MVVM方式。
我们现在进入 java class.
您正在混合 2 种完全不同的东西。
首先扩展 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 的文档。
然后重构你的整个事情,如果你仍然有问题回来提出更好的问题,我们可以帮助你。
我想我在理解 Wire
组件时遇到了一个根本问题,如果有人可以解释为什么它们使用 Composer
和 doAfterCompose()
-方法以及为什么接线会这样'在 @command
方法中无法工作(组件 -> NULL)(就像按钮的 onClick)。
我无法 post 整个代码,所以我只是粘贴了一个有效的 zul 和一个有效的 Java Class
我用 MVVM
访问了一些 values from ZUL-Components
。 java class
也用于 generates some components dynamically
数据库中的数据(in doAfterCompose()
-方法)。
Szenario:显示了 gui,并通过 doAfterCompose()
动态创建了几个组件(行组件 + 行组件中的复选框)和 Wire Component orgTypeRows
(类型行)。效果不错。
但要访问结果,您需要单击具有 onClick event "startSearch"
的搜索按钮,该按钮会调用 java 方法 startSearch()
。在这种方法中,我想访问生成的组件(Type Checkbox)并验证哪些框已被选中,但是当我尝试访问此处的 wire 组件时,Rows Component 为 NULL
这是 ZUL 代码 search.zul and the Java-Code search.java
这不可能吗?我应该只为 doAfterCompose()
中的按钮而不是 @command
中的按钮使用侦听器,但是如何访问 doAfterCompose()
中的视图模型,其中视图模型的所有值都是 NULL?
我认为您在 MVC 和 MVVM 方面存在根本性问题。
让我们从你展示的zul开始。
我在 zul 中找不到任何 apply
属性,因此必须在另一个 zul 中应用控制器或视图模型,所以我不知道您使用的是 MVC 还是 MVVM。
属性的加载是MVVM方式。
我们现在进入 java class.
您正在混合 2 种完全不同的东西。
首先扩展 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 的文档。
然后重构你的整个事情,如果你仍然有问题回来提出更好的问题,我们可以帮助你。