use 属性

ページ中に不適切に組み込まれているコードはメンテナンスの際に問題を起こさせるかもしれません。ビューからコードを分離させるには二つの方法があります。

一つ目は、大事なイベントに注目し、それに応じて、適切なメソッドを適用します。たとえば、初期化、プロセス、取り消しをそれぞれonCreate [10]onOK [11]onCancel [12]で対応します。

<window id="main" onCreate="MyClass.init(main)"
   onOK="MyClass.process(main)" onCancel="MyClass.cancel(main)"/>    

なお、MyClassというJavaクラスが存在しなければなりません。

import org.zkoss.zul.Window;

public class MyClass {
    public static void init(Window main) { //does initialization    
    }    
    public static void save(Window main) { //saves the result    
    }    
    public static void cancel(Window main) { //cancel any changes    
    }    
}

二つ目の方法は、use属性によりクラスを指定してデフォルトコンポーネントクラスを取り換えます。

<window use="MyWindow"/>

そして、以下のようにMyWindowというJavaクラスが存在しなければなりません。

import org.zkoss.zul.Window;

public class MyWindow extends Window {
    public void onCreate() { //does initialization    
    }    
    public void onOK() { //save the result    
    }    
    public void onCancel() { //cancel any changes    
    }    
}

これら二つのアプローチは異なった利点があります。これらは二つともMVCモデルのコントローラーとして作動しています。どちらを使うのかはユーザーの選択です。

zscriptでJavaクラスを作る

BeanShell[13]のおかげで、以下のようにJavaクラスはzscriptの中で使用することができます。

<zscript>
    public class MyWindow extends Window {    
    }
</zscript>
<window use="MyWindow"/>

【ヒント】: JRuby 等多くのスクリプト言語では、開発者はJVMにアクセスできるクラスを定義できます。詳しくは関連したマニュアルを参照してください。

コードをビューから分けるのに、全てのzscript コードを別ファイルに置くことができます。たとえば、 mywnd.zsファイルに。そして以下のようにパスを指定します。

<zscript src="/zs/mywnd.zs"/>
<window use="MyWindow"/>

【ヒント】: init 指令で zscript を指定するのも可能です。その違いは、init 指令は全てのコンポーネントが生成される前に(Pageの初期の時点で)処理されます。ZKユーザーインターフェースマークアップ言語 のinit コマンド セクションを参考にしてください。



[10] ZUMLページに定義されたウィンドウが生成されたら、onCreateイベントが送信されます。

[11] ユーザーがリターンキーを押したら、onOKイベントが送信されます。

[12] ユーザーがESCキーを押したら、onCancelイベントが送信されます。

[13] http://www.beanshell.org