2010-05-04 74 views
26

我是Dojo Toolkit的新手。我發現了錯誤Dojo和取消註冊小部件

Tried to register widget with id=myButton but that id is already registered 

每當我嘗試加載道場的內容兩次(意指通過jQuery.Load我HTML內容加載到一個div容器)。有沒有註銷dojo中已經註冊的小部件的方法?我見過一些例子,但我並沒有真正讓他們工作。

我的按鈕:

<button dojoType="dijit.form.Button" id="myButton">button</button> 

回答

35

如果你正在尋找註銷特定窗口小部件,你可以用自己的destroy()destroyRecursive()方法。第二個破壞你正在銷燬的窗口中的任何窗口小部件(即調用表單窗口小部件上的destroyRecursive也會銷燬所有窗體組件)。

對你來說,這聽起來像你最好的選擇將是前jQuery.load做到這一點 -

var widgets = dijit.findWidgets(<containerDiv>); 
dojo.forEach(widgets, function(w) { 
    w.destroyRecursive(true); 
}); 

上面的代碼將註銷所有部件在<containerDiv>保存其關聯的DOM節點。要銷燬DOM節點,請改爲將false改爲destroyRecursive

參考:

http://dojotoolkit.org/api/1.3/dijit/_Widget/destroyRecursive

+1

其他正在尋找解決方案的人:另請參閱下面的答案,瞭解非遞歸解決方案。 – 2010-05-05 10:22:20

+0

正是我在找的東西。謝謝一堆! – mtchuente 2016-03-01 15:34:03

4

這爲我工作:

dijit.byId('myButton').destroy(true); 
1

我想你會過得更好去除您的按鈕id和使用連接點訪問它。你基本上可以做<button dojoType="dijit.form.Button" data-dojo-attach-point="myButton">button</button>

然後在你的代碼中,你會像this.myButton....那樣訪問它,但是我不知道你正在使用哪個dojo版本。這將解決任何ID問題,因爲dojo會自動爲其分配一個唯一的ID。