java - 如何在 zk 中找到给定组件的根组件?

标签 java zk

在我的 View 模型中,我有以下代码:

@Command
public void onFinish(@BindingParam(value = "myButton") Button myButton) {
        Component root = myButton.getParent().getParent().getParent();
        ...
}

是否有更优雅的方法来查找任何给定组件的根组件?每次更改 zul 时都必须更改上面的表达式。

附注我是 zkoss 的新手..:)

最佳答案

这完全取决于组件的根目录是什么。

您的根通常是一个 IdSpace,如果您没有设置其他 IdSpace 元素,您可以使用:

@Command
public void onFinish(@ContextParam(ContextType.SPACE_OWNER) IdSpace spaceOwner) {

    ...
}

这样,您就不必在 zul 中传递任何内容。
它将自动获取该组件。 请记住,IdSpace 是在某些特定组件中实现的接口(interface)。

Please take a look of the other ,也许更适合您的情况,您可以选择。

但是有also other tricks ,这个使用 CSS 选择器:

@Command
public void onFinish(@SelectorParam(":root") Component root) {
    ...
}

这样你就永远拥有根。

我不太喜欢使用绑定(bind)参数将组件从 View 发送到 View 模型。
原因是今天,您从按钮调用此命令,但也许您在其他组件上添加相同的命令,然后这将失败。
是的,您可以使用 Component 类,但是 MVVM 有很多方法可以更好地做到这一点,而不会污染您的 View 。
请记住,MVVM 的重点是 UI 和代码之间的分离。
什么触发命令可能并不重要,即使您的集合将在屏幕上填充什么也并不重要。

关于java - 如何在 zk 中找到给定组件的根组件?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59245984/

相关文章:

java - 访问根级系统文件夹Android

java - ZK Wire 组件在 @command 方法 (MVVM) 中不可访问或 View 模型不可访问 (dAft Compose MVC)

java - 如何在列表单元格中添加组件?

java - 如何使用zk hbox数组?

java - 是否可以从自定义位置动态加载 ZK 7 主题 jar?

java - zk登录后访问登录页面

java - 优化两个列表比较

java - Java 中数组的命中计数(读取)

Java 重写 compareTo, Long

java - 在 Java Applet 中实现数字签名