ページ中に不適切に組み込まれているコードはメンテナンスの際に問題を起こさせるかもしれません。ビューからコードを分離させるには二つの方法があります。
一つ目は、大事なイベントに注目し、それに応じて、適切なメソッドを適用します。たとえば、初期化、プロセス、取り消しをそれぞれ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モデルのコントローラーとして作動しています。どちらを使うのかはユーザーの選択です。
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 コマンド セクションを参考にしてください。