我有一些Ajax調用,內容被dojo.place插入。我在新內容中有dojo小部件,所以我必須在內容「放置」後執行dojo.parser.parse()。dojo.place的oncomplete事件
麻煩是我找不到執行此操作。如果我把代碼放在下一行,我會很快執行。我不得不把它放在setInterval命令中,但這是一個垃圾解決方案。
dojo.place上的oncomplete事件任何人。幫助真的很感激。
我有一些Ajax調用,內容被dojo.place插入。我在新內容中有dojo小部件,所以我必須在內容「放置」後執行dojo.parser.parse()。dojo.place的oncomplete事件
麻煩是我找不到執行此操作。如果我把代碼放在下一行,我會很快執行。我不得不把它放在setInterval命令中,但這是一個垃圾解決方案。
dojo.place上的oncomplete事件任何人。幫助真的很感激。
dojo.place()是同步的,因此在地點調用之後立即調用解析器應該不成問題。這聽起來像問題在於你在XHR完成之前調用解析器。
不幸的是,您需要setTimeout,因爲瀏覽器不會同步呈現DOM更改。由於在Opera博客中解釋:Timing and Synchronization in JavaScript:
這裏是僞代碼的例子:
headlineElement.innerHTML = "Please wait..."; performLongRunningCalculation(); headlineElement.innerHTML = "Finished!";
在Internet Explorer和Mozilla的 文本 「請稍候...」 永遠不會 向用戶顯示,因爲只有在整個腳本 完成後纔會呈現 。在Opera中,在其他 手中,顯示「Please wait ...」文本爲 ,計算結果爲 正在運行。
很少有類似的問題在SO:
如果您從您的xhrGotten HTML DOM節點,說
var d = document.createElement("div");
d.innerHTML = returned_html;
然後你可以解析新的div,在使用dojo.place將新節點添加到文檔之前創建小部件。
dojo.parser.parse(d);
dojo.place(d, ref_node, "last");
您的服務返回的數據是什麼樣的?你可以用delcaritively編程方式創建dijits嗎? – seth 2009-07-23 21:44:46