2010-05-04 75 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。