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

问题描述 投票:4回答:2

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

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

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

P.S。我是zkoss的新手。:)

java zk
2个回答
2
投票

假设您的根组件具有ID,则可以执行以下操作:

Component root = myButton.getPage().getFellow("id-of-root-component");

3
投票

全部取决于组件的根目录。

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

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

    ...
}

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

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

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

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

像这样,您将永远拥有根。

我不是通过绑定参数将组件从视图发送到视图模型的忠实粉丝。原因是今天,您可以通过按钮调用此命令,但是也许您在其他组件上添加了相同的命令,但这将失败。是的,您可以使用Component类,但是MVVM有很多方法可以更好地完成此操作而不污染您的视图。请记住,MVVM的要点是UI和代码之间的分离。触发命令可能无关紧要,即使您的集合将显示在屏幕上也无关紧要。

© www.soinside.com 2019 - 2024. All rights reserved.