在我的视图模型中,我有以下代码:
@Command
public void onFinish(@BindingParam(value = "myButton") Button myButton) {
Component root = myButton.getParent().getParent().getParent();
...
}
是否有更优雅的方法来找到任何给定组件的根组件?每次更改zul时,都必须更改上面的表达式。
P.S。我是zkoss的新手。:)
假设您的根组件具有ID,则可以执行以下操作:
Component root = myButton.getPage().getFellow("id-of-root-component");
全部取决于组件的根目录。
您的根通常是一个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和代码之间的分离。触发命令可能无关紧要,即使您的集合将显示在屏幕上也无关紧要。