Home   Single Page

ネーム空間とIDスペース

インタプリタでコンポーネントに直接にアクセスするため、ネーム空間(org.zkoss.scripting.Namespace)のコンセプトを使用します。まず、どのIDスペースもネーム空間を持っています。さらに、ネーム空間の中で定義された値をネーム空間内のスクリプトコードとEL表記は参照できます。

<window border="normal">
    <label id="l" value="hi"/>    
    <zscript>    
        l.value = "Hi, namespace";        
    </zscript>    
    ${l.value}    
</window>

以下の例の中で二つのネーム空間があります。一つはウィンドウw1に属していて、もう一つはウィンドウw2 [24]に属している。このようにして、b1ボタンのonClickスクリプトはウィンドウw1で定義されたラベルを参照して、b2ボタンのonClickスクリプトはw2内で定義されたcheckboxを参照します。

<window id="w1">
    <window id="w2">    
        <label id="c"/>        
        <button id="b1" onClick="c.value = &quot;OK&quot;"/>        
    </window>    
    <checkbox id="c"/>    
    <button id="b2" onClick="c.label = &quot;OK&quot;"/>    
</window>

ここで一つ注意するポイントがあります:ネーム空間は階層です。つまり、ウィンドウw2内のzscriptはw2の中に重複がない限り、ウィンドウw1のコンポーネントを見ることができます。このようにして、以下の例の中でボタンb1をクリックすることはラベルcを変えます。

<window id="w1">
    <window id="w2">    
        <button id="b1" onClick="c.value = &quot;OK&quot;"/>        
    </window>    
    <label id="c"/>    
</window>

ZKのコンポーネントはネーム空間にコンポーネントを指定する他に、setVariableメソッドによって変数をコンポーネントに指定することができます。そうしてzscriptはそれらを直接参照することができます。



[24] ウィンドウはorg.zkoss.zk.ui.IdSpaceを実装しますので、独立したIDスペースとネーム空間が形成されます。