ZK 窗口在 ID 空间中不唯一

Vig*_*esh 5 combobox listbox zk zul

在我们的项目中,我们用于ZK网页。有一个combobox有列表。当选择时,它通过从java对象获取数据onSelect,我已经给出了逻辑。当我选择一个时,该页面上有 4 个listboxes根据选择填充数据。当我第一次选择时,没有出现问题。

但第二次我收到一个错误弹出窗口,如“窗口的 id 空间中不唯一”,并显示必须在选择时填充的列表框项目 id。

有人可以帮忙吗?

注意:虽然它显示此错误,但我listboxes根据组合框选择正确填充。我仍然无法阻止这个错误的发生..

Sea*_*lly 1

您的问题是 ZK 中的 ids 冲突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);
}
Run Code Online (Sandbox Code Playgroud)

这将在您第一次单击 时起作用myButton,但会在第二次单击时引发错误。这是因为第二个事件试图添加myLabelmyWindow但那里已经存在了myLabel

有很多方法可以解决这个问题,具体取决于您想要做什么。
请参阅有关ID 空间的 ZK 文档了解更多信息。