2009-07-23 12 views
2

dojo.placeによってコンテンツが挿入されたajaxコールが多数あります。新しいコンテンツにはdojoウィジェットがありますので、コンテンツが配置された後にdojo.parser.parse()を実行する必要があります。dojo.placeのoncompleteイベント

問題は私がこれを実行することを見つけることができません。コードを次の行に置くと、すぐに実行されてしまいます。私はそれをsetIntervalコマンドに入れなければならなかったが、それはごみの解決策である。

docom.placeの誰でもoncompleteイベント。ヘルプは本当に感謝します。

+0

サービスから返されたデータはどのようなものですか?プログラム的にdijitsをdelcaritively作成できますか? – seth

答えて

2

dojo.place()は同期型です。したがって、場所呼び出しの直後にパーサを呼び出すことは問題ではありません。問題は、XHRが完了する前にパーサーを呼び出しているようです。

0

残念ながら、ブラウザはDOMの変更を同期して表示しないため、このsetTimeoutが必要です。オペラのブログで説明したように:Timing and Synchronization in JavaScript

ここで擬似コードの例です:Internet ExplorerとMozillaの、 テキストで

headlineElement.innerHTML = "Please wait..."; 
performLongRunningCalculation(); 
headlineElement.innerHTML = "Finished!"; 

"お待ちください..." になることはありませんスクリプト全体の後にのみ がレンダリングされたため、ユーザに表示されます が終了しました。 Operaでは、もう1つの の手で、 "Please wait ..."というテキストが の実行中に と表示されます。

SOでいくつかの同様の質問があります。

0

があなたのxhrGottenのhtmlからDOMノードを作成する場合は、

var d = document.createElement("div"); 
d.innerHTML = returned_html; 

を言います次にあなたdojo.placeを使用して新しいノードを文書に追加する前に、新しいdivを解析してウィジェットを作成できます。

dojo.parser.parse(d); 
dojo.place(d, ref_node, "last"); 
関連する問題