0


0

ZendにDojo対応の要素を動的に追加する

私は `Zend_Dojo_Form`を使ってフォームを書いています。

要素をフォームに動的に挿入しない限り、すべて問題ありません(ajaxを使用している場合、ユーザーは[]ボタンをクリックして要素を追加できます)。

私は自分の新しい `Zend_Dojo_Form_Element_FilteringSelect`をページに挿入することに成功しましたが、その要素はdojoに対応していません(自動補完、またはtundraスタイルはありません)。

私は、ページが最初にロードされたときにdojoが既存のフォーム要素を変換し、新しいノードが追加されたときにそれらを再度解析しないことを推測しています…​ しかし、道場に町の中に新しい要素があることをどうやって伝えるかわかりません。

私が試したこと:

  • `dojo.parser.parse();`の実行または `dojo.parser.parse( 'id_of_new_element');`新しい要素の挿入後

  • `Zend_Dojo_View_Helper_Dojo :: setUseDeclarative();`を追加する Dojo_Formのinit()メソッド(http://old.nabble.com/Dijit-elements-and-xhrPost-td20276334.html[nabbleのフォーラム]で見られます)

新しい要素を追加するための私の方法はhttp://www.jeremykendall.net/2009/01/19/dynamically-adding-elements-to-zend-form/ [Jeremy Kendall]によって記述されたものです。

私の問題がZendやDojoとの非互換性から来ているのか、それとも何かが足りないのかどうかはわかりません…

1 Answer


1


ちょっといじった後、私はついにそれを実行することに成功しました。

http://www.jeremykendall.net/2009/01/19/dynamically-adding-elements-to-zend-form/[Jeremy Kendallのjavascript code]では、* function ajaxAddField()*に次のスクリプトを挿入する必要があります。
// Insert new element before the Add button
$( "#addElement-label")。before(newElement);

// Parse the element to receive Dojo style
var n = dojo.byId( "newName" id); n.outerHTML = newElement; dojo.parser.parse(n);

と交換

searchString = '* [id ^ = newName' lastId ' - ]'; $(searchString).remove()

*関数removeField()*内で

// Destroy dijits before destroying the node
var n = dojo.byId( "newName" lastId); var dijits = dijit.findWidgets(n); if(dijits){(var i = 0、n = dijits.length; i <n; i){dijits [i] .destroyRecursive(); dijits = dojo.parser.parse( "newName" lastId);

// Destroy the node
dojo.destroy( "newName" lastId);

それを実行するより良い方法がまだあるかもしれませんが、それは私のために働いた。 ノードを削除するときは、 dijitsを前に破棄する必要があります。]そうしないと、HTMLフラグメントが再度解析されないためです。