上下文菜单

组件: popupmenupopup

你可以将popupmenupopup组件的ID指派给任一个XUL组件的context属性,这样,当用户右击此组件时popupmenupopup组件就会打开。

如下所示,通过将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>

定制的tooltip及弹出菜单

除了当用户右击组件时打开一个 popup,ZK也可以其它情况下打开一个popup。

属性

描述

context

当用户右键点击一个带有context属性的组件时,将会显示已指定id的popupmenupopup组件。

tooltip

当用户鼠标经过一个带有tooltip属性的组件时,将会显示已指定id的popupmenupopup组件。

popup

当用户点击一个带有popup属性的组件时,将会显示已指定id的popup或menupopup组件。

例如:

<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, tooltipcontext属性内指定任意的标识,只要它们在同一页面。换句话说,它并不限于(confine)ID空间。

onOpen事件

当一个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>