2009-07-23 38 views
2

我有一些Ajax調用,內容被dojo.place插入。我在新內容中有dojo小部件,所以我必須在內容「放置」後執行dojo.parser.parse()。dojo.place的oncomplete事件

麻煩是我找不到執行此操作。如果我把代碼放在下一行,我會很快執行。我不得不把它放在setInterval命令中,但這是一個垃圾解決方案。

dojo.place上的oncomplete事件任何人。幫助真的很感激。

+0

您的服務返回的數據是什麼樣的?你可以用delcaritively編程方式創建dijits嗎? – seth 2009-07-23 21:44:46

回答

2

dojo.place()是同步的,因此在地點調用之後立即調用解析器應該不成問題。這聽起來像問題在於你在XHR完成之前調用解析器。

0

不幸的是,您需要setTimeout,因爲瀏覽器不會同步呈現DOM更改。由於在Opera博客中解釋:Timing and Synchronization in JavaScript

這裏是僞代碼的例子:

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

在Internet Explorer和Mozilla的 文本 「請稍候...」 永遠不會 向用戶顯示,因爲只有在整個腳本 完成後纔會呈現 。在Opera中,在其他 手中,顯示「Please wait ...」文本爲 ,計算結果爲 正在運行。

很少有類似的問題在SO:

0

如果您從您的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"); 
相關問題