Home   Single Page

fulfill 属性

fulfill="event-expr"fulfill="event-expr1, event-expr2, event-expr3"fulfill="event-expr=uri-expr"fulfill="event-expr1, event-expr2=uri-expr2"fulfill="=uri_expr"

ここで event-expr 、 event-expr1 その他はイベント表記と呼ばれます。イベント表記は特定のコンポーネントをターゲットとしてイベントを識別するために使用されます。これは以下のフォーマットのうちの1つです。

event-nametarget-id.event-nameid1/id2/id3.event-name${el-expr}.event-name

そして uri-expr は URI かURI を返す EL 表記です。例えば、

/my/super.zul${my_super_zul}

これは子要素を作成するタイミングを指定します。デフォルトによって、(つまり、fullfillは指定されていない場合)子要素はZUMLページが読み込まれた直後、親コンポーネントが作成された直後に作成されます。

fullfill属性で状態を指定すれば、子要素の作成を遅らせます。その条件はイベント名と、目標コンポーネント識別子(オプション)又はパス(オプション)から成り立っています。つまり、指定された目標コンポーネントがイベントを受け取るまでに、子要素 は処理されません。識別子が指定されていない場合、同じコンポーネントが想定されます。

EL表記が指定されている場合、コンポーネント、識別子またはパスを送り返さなければなりません。

詳しくはロードオンデマンドセクションをご覧ください。

URI 表記と使用

URI 表記が指定されると、 ZK ローダーは URI に指示されている通りにコンポーネントを作成し、それを子供のコンポーネントとしてアサインします。 URI に指示されている通りにコンポーネントを作成するということは、実際に Executions 内のcreateComponents メソッドを起動します。例えば、以下の例では ZK ローダーは b ボタンがクリックされると Executions.createComponents("/my/super.zul", d, null) を起動して d div の子供コンポーネントを作成します。

<button id="b" label="open"/>
<div id="d" fulfill="b.onClick=/my/super.zul">
</div>

イベント表記が指定されていないと、 ZK ローダーは全てのプロパーティがアサインされて、子供コンポーネントが作成された直後にコンポーネントを作成します。以下の例では、 ZK ローダーは最初に combobox を作成して /my/super.zul ないの定義にあるコンポーネントを作成します。

<div fulfill="=/my/super.zul">
    <combobox/>    
</div>

onFulfill イベント

ZK ローダーが fulfill 条件を適用後、すなわち全ての後続のコンポーネントが作成された後、 org.zkoss.zk.ui.event.FulfillEvent のインスタンスである、onFulfill イベントを起動して、もしあれば次のプロセスのためにコンポーネントに通知します。

例えば、 org.zkoss.zk.ui.Components クラスの wireVariables メソッドを使用するならば、再び onFulfill イベント内で wireVariables を呼んで、新しいコンポーネントと紐付けする必要があるでしょう。

<div fulfill="b1.onClick, b2.onOpen"
onFulfill="Components.wireVariables(self, controller)">

...

</div>