# Dojoフォーム要素とデコレーター

dijit表示ヘルパーに基き、 クラスのZend_Dojo_Formファミリーは、 あなたのフォームの範囲内でネイティブにDijitsを利用する能力を提供します。

フォームでDojoフォーム要素を利用するために３つの選択肢があります:

- Zend_Dojo::enableForm()を使います。 これは配置されたフォーム項目全てにデコレーターと要素のためのプラグイン・パスを再帰的に加えます。 その上、それは表示オブジェクトをDojo使用可能にします。 しかしながら、この呼び出しの後に配置したサブフォームはどれでも Zend_Dojo::enableForm()に渡されなければいけないことに注意してください。

- それぞれDojo特有のフォーム及びサブフォーム実装、 Zend_Dojo_FormとZend_Dojo_Form_SubFormを使います。 これらはZend_Form及びZend_Form_SubFormのドロップインの置き換えとして使うことができ、 適当なデコレーターと要素パスをすべての含み、 Dojo特有のデフォルトのDisplayGroupクラスを設定し、 ビューをDojo使用可能にすることができます。

- 最後に、最もあきあきしますが、あなた自身で適当なデコレーターと要素パスをセットして、 デフォルトのDisplayGroupクラスをセットし、 ビューをDojo使用可能にすることができます。 Zend_Dojo::enableForm()がすでに行うことなので、 この方法で我慢する理由はほとんどありません。

既存のフォームでDojoを使用可能にする

"ちょっと待って" とあなたは言います; "私は、自分自身のカスタム・フォーム・クラスでZend_Formをすでに拡張しています！ どのようにしたら、Dojoを使用できますか？"

初めに、 Zend_Formの拡張から Zend_Dojo_Formの拡張への 最も簡単で単純な変更は Zend_Form_SubFormのインスタンス化を行う箇所を全て Zend_Dojo_Form_SubFormのインスタンス化を行うように 更新することです。

２つ目の方法はカスタムフォームのinit()メソッドの中で Zend_Dojo::enableForm()を呼び出すことです; フォームの定義を完了させるときは、 Dojoを使用可能にするためにサブフォーム全てを通じて繰り返します:

    class My_Form_Custom extends Zend_Form
    {
        public function init()
        {
            // フォームでDojoを使用可能にする:
            Zend_Dojo::enableForm($this);

            // 引き続きここからフォームの定義

            // サブフォーム全てでDojoを使用可能にする:
            foreach ($this->getSubForms() as $subForm) {
                Zend_Dojo::enableForm($subForm);
            }
        }
    }

dijitに特有のフォームデコレーターと要素の使い方は まるで他全てのフォーム・デコレーターまたは要素の使い方のようです。