从列表框行显示按钮的按钮
问题描述:
我想创建一个按钮,它可以显示一个窗口,以便在单击时显示列表框中元素的详细信息。 itsetf从JSONObject的列表创建这样的列表框:从列表框行显示按钮的按钮
<listbox id="userListbox">
<listhead>
<listheader laber="Action"></listheader>
<listheader label="Id"></listheader>
<listheader label="Name"></listheader>
<listheader label="Address"></listheader>
<listheader label="Phone"></listheader>
</listhead>
<listitem forEach="${userController.list}">
<listcell>
<button label="Detail" id="detailButton"></button>
</listcell>
<listcell label="${each.id}" ></listcell>
<listcell label="${each.name}" ></listcell>
<listcell label="${each.address}" ></listcell>
<listcell label="${each.phone}" ></listcell>
</listitem>
</listbox>
的每一行(listcell元素里面)总有一个按钮显示细节。但是当我加载页面时,它未能表现出与错误信息列表:
在ID空间<窗口cP8Q0#userWindow>不是唯一的:detailButton。
任何想法当点击按钮时显示一个窗口?这里是按钮被点击时的代码:
@Listen("onClick = #detailButton")
public void showModal(Event event) {
Component comp = Executions.createComponents("/widgets/window/modal_dialog/employee_dialog.zul", null, null);
if(comp instanceof Window) {
((Window)comp).doModal();
}
}
谢谢你的帮助。
答
<button label="Detail" />
@Listen("onClick = listbox listitem listcell button")
答
问题是,如果你点击不同的按钮,你一次又一次地运行createComponents。您的employee_dialog.zul只包含一次,因为它包含ID;如果您执行两次操作,则您将创建具有相同ID的第二组组件,并且这些ID在给定的idSpace中应该是唯一的(请参阅ZK开发人员指南了解该理论)。
这里还有其他一些问题:为什么要创建两次组件?为什么不保留一个,只有一个按钮点击显示和隐藏它们。这样更有效率。
看Button to Show a Window from Listbox Row这表明您可以:
<zk>
<!-- hidden -->
<window id="wnd" title="My Modal" visible="false" width="300px">
<button label="close" onClick="wnd.visible = false"/>
</window>
<!-- click button to pop the hidden window! -->
<button label="do it" onClick="wnd.doModal()"/>
</zk>
所以,你可以使用一个
<include src="/widgets/window/modal_dialog/employee_dialog.zul">
拉模式对话框到主网页的底部一次且仅一次。然后在代码中,你可以设置数据到它,做
win1.doModal();
其中WIN1是在片段中定义的模式窗口。你必须告诉模型窗口在弹出之前要显示什么,但这并不难。使用desktopScope.put(“myName”,this)使对话框的控制器/视图模型注册在主窗口中的控制器/视图模型可以找到它并与之通信的位置要呈现的数据。
另外两个提示。
- 隐藏您的片段作为/WEB-INF/zul/employee_dialog.zul是在WEB-INF什么不能直接通过浏览器为更好的安全访问。
- 尽量不要把任何祖尔放入你的java。这是混合行为与演示。有时它是不可避免的,但总是先尝试让zul保持在zul中,然后通过java ID进行交互(很像我的建议)。这并不总是可行的,但逻辑与布局的分离是核心设计模式。
西蒙
谢谢,@ ten2net。这就解决了我的问题,然后再来:) “按钮标签=”详细信息“/” @Listen(“onClick = listbox listitem listcell button”) – Eaton
嗨@ ten2net,如果我想要在两个或更多的按钮列表框?我应该如何调用以获取特定按钮的onClick事件? – Eaton