组件: popup
和 menupopup
。
你可以将popup
或menupopup
组件的ID指派给任一个XUL组件的context
属性,这样,当用户右击此组件时popup
或menupopup
组件就会打开。
如下所示,通过将ID指派给context
属性可以很容易的启动context菜单。当然,你可以为多个组件指派相同的ID。
<label value="Right Click Me!" context="editPopup"/> <separator bar="true"/><label value="Right Click Me!" onRightClick="alert(self.value)"/> <menupopup id="editPopup"> <menuitem label="Undo"/> <menuitem label="Redo"/> <menu label="Sort"> <menupopup> <menuitem label="Sort by Name" autocheck="true"/> <menuitem label="Sort by Date" autocheck="true"/> </menupopup> </menu> </menupopup>
注意直到用户右击与其组件(通过ID关联)时menupopup
才会变得可见。
[技巧]: 如果你只是想禁用浏览器默认的上下文菜单,可以为context属性指定一个并不存在的ID.
popup
是一个比menupopup
更通用的popup组件。你可以在popup内放置任意类型的组件。
<label value="Right Click Me!" context="any"/> <popup id="any" width="300px"> <vbox> It can be anything. <toolbarbutton label="ZK" href="http://zk1.sourceforge.net"/> </vbox> </popup>
除了当用户右击组件时打开一个 popup,ZK也可以其它情况下打开一个popup。
属性 |
描述 |
---|---|
|
当用户右键点击一个带有 |
|
当用户鼠标经过一个带有 |
|
当用户点击一个带有 |
例如:
<window title="Context Menu and Right Click" border="normal" width="360px"> <label value="Move Mouse Over Me!" tooltip="editPopup"/> <separator bar="true"/> <label value="Tooptip for Another Popup" tooltip="any"/> <separator bar="true"/> <label value="Click Me!" popup="editPopup"/> <menupopup id="editPopup"> <menuitem label="Undo"/> <menuitem label="Redo"/> <menu label="Sort"> <menupopup> <menuitem label="Sort by Name" autocheck="true"/> <menuitem label="Sort by Date" autocheck="true"/> </menupopup> </menu> </menupopup> <popup id="any" width="300px"> <vbox> ZK simply rich. <toolbarbutton label="ZK your killer Web application now!" href="http://zk1.sourceforge.net"/> </vbox> </popup> </window>
注意,你可以在popup
, tooltip
和 context
属性内指定任意的标识,只要它们在同一页面。换句话说,它并不限于(confine)ID空间。
当一个context menu, tooltip 或 popup 将要显示(或隐藏)时,onOpen
事件会被送至ontext, tooltip 或poup menu用于通知。事件为org.zkoss.zk.ui.event.OpenEvent
类的一个实例,而你可以使用getReference
方法来获取致使context menu, tooltip 或 popup出现的组件。
为了提高性能,你可以推迟内容的创建直到它们变得可见,也就是,直到接收onOpen
事件。
推迟创建内容的最简单方式是使用fulfill
属性,如下,
<popup id="any" width="300px" fulfill="onOpen"> <button label="Hi"/><!-- whatever content --> </popup>
然后。当加载页面时,内容(Hi按钮)不会被创建。在接收到onOpen
事件的第一时间,内容就会被创建。
若你喜欢在Java代码中动态的操纵内容,可以按如下描绘的方式监听onOpen
事件。
<popup id="any" width="300px"> <attribute name="onOpen"> if (event.isOpen()) { if (self.getChildren().isEmpty()) { new Button("Hi").seParent(self); ... } if (event.getReference() instanceof Textbox) { //you can do component-dependent manipulation here ... } } </attribute> </popup>