在@command方法(MVVM)中无法访问ZK Wire Components,或者无法访问viewmodel(在Compose MVC之后)

时间:2015-01-21 12:06:56

标签: java mvvm zk

我认为我理解Wire组件有一个基本问题,如果有人可以解释为什么它们使用ComposerdoAfterCompose() - 方法以及为什么布线不起作用@command - 方法中的(组件 - > NULL)(如从按钮点击onClick)。

我无法发布整个代码所以我只是粘贴了一部分工作区和一个工作的Java类

我使用MVVM访问了一些values from ZUL-Componentsjava 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?

1 个答案:

答案 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的文档 然后重构你的整个事情,如果你还有问题,请回答一个更好的问题,我们可以帮助你。