ロードオンデマンド

デフォルトで、ZKはZUMLページ中で定義されたものを元にして、ページが読み込まれるときにコンポーネントを作成します。しかし、コンポーネントの部分的な作成は確認できる(visible)まで遅らせることができます。この特徴はロードオンデマンドと呼ばれています。これによって、初期段階でinvisibleコンポーネントがたくさんある場合、パフォーマンスが向上します。

fulfill属性によるロードオンデマンド

子コンポーネント作成を遅らせる最も簡単な方法はfulfill属性を使うことです。例えば、以下のコード断片のcomboitemコンポーネントは、comboboxコンポーネントが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>

イベントリスナを使用したロードオンデマンド

手動で子要素を作成するか、または、動的にそれらを変更する必要がある場合、子要素が参照可能(visible)になったというイベントを確認してからイベントリスナの中で処理することができます。例えば、

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