随机存取(Load on Demand)

默认情况下,当加载页面时,ZK基于在ZUML页面内定义的内容依次创建组件。但是,我们可以推迟部分组件的创建,直到它们可见。这个特性即为随机存取(load-on-demand)。如果在初始时有许多非可见组件,随机存取可以提高性能。

使用fulfill属性的随机存取

延迟创建子组件的最简单方式是使用fulfill属性。例如,在下面的代码片断中,comboitem组件将不会被创建,comboitem组件接收了onOpen事件,此事件可使comboitem变为可见。

<combobox fulfill="onOpen">
   <comboitem label="First Option"/>
</combobox>

换句话说,如果一个ZUML元素使用了 fulfill 属性,直到 fulfill 指定的事件发生时这个组件的子组件才会被处理。

如果创建子组件创建事件的目标是另一个组件,你可以按如下描述指定目标组件的标识。

<button id="btn" label="show" onClick="content.visible = true"/>
<div id="content" fulfill="btn.onClick">
   Any content created automaticall when btn is clicked
</div>

如果组件属于不同的ID空间,你可以在事件名称之后指定一个路径。

<button id="btn" label="show" onClick="content.visible = true"/>
<window id="content" fulfill="../btn.onClick">
   Any content created automaticall when btn is clicked
</window>

使用事件监听器的随机存取

如果你喜欢手动创建子组件或者你需要动态地修改它们,你可以监听使这些子组件变得可见的事件,然后在监听器中操纵它们。例如:

<combobox id="combo" onOpen="prepare()"/>
<zscript><![CDATA[
   void prepare() {
      if (event.isOpen() && combo.getItemCount() == 0) {
         combo.appendItem("First Option");
      }
   }
]]></zscript>