您的问题是 ZK 中的 id 冲突id space
。
有点背景。。
ZK 在运行时为组件生成 id,如果你在浏览器中打开 DOM,你会看到每个组件都有一些机器可读的 id。
但是,您也可以给组件一个 id。此 id 不会转到 DOM,但可以让您在应用程序中引用该组件。
这两个不应该混淆。您遇到的冲突是后一种类型的 id;您在 Java 代码或 ZUL 文件中为组件分配了一个 ID,该 ID 在运行时不是唯一的。
您描述的仅在您第二次单击时才发生的情况是这里的一个故事标志。您在事件中添加的内容中定义了一个 id,完成后您不会删除此内容。
考虑以下示例:
@Wire
private Window myWindow;
@Listen(Events.ON_CLICK + " = #myButton")
public void onMyButtonClicked() {
Label myLabel = new Label("sean is cool");
myLabel.setId("myLabel");
myLabel.setParent(myWindow);
}
这将在您第一次单击时起作用myButton
,但会在第二次单击时引发错误。那是因为第二个事件试图添加myLabel
,myWindow
但那里已经有一个myLabel
。
有很多方法可以解决这个问题,具体取决于您要执行的操作。查看关于ID 空间
的 ZK 文档了解更多信息。