Dojo和注销小部件

Dojo和注销小部件,dojo,widget,toolkit,Dojo,Widget,Toolkit,我是Dojo工具包的新手。我发现了错误 Tried to register widget with id=myButton but that id is already registered 每当我尝试两次加载dojo内容时(这意味着我通过jQuery.load加载HTML内容到容器div中)。有没有办法注销dojo中已经注册的小部件?我看过一些例子,但我并没有真正让它们起作用 我的按钮: <button dojoType="dijit.form.Button" id="myButton

我是Dojo工具包的新手。我发现了错误

Tried to register widget with id=myButton but that id is already registered
每当我尝试两次加载dojo内容时(这意味着我通过jQuery.load加载HTML内容到容器div中)。有没有办法注销dojo中已经注册的小部件?我看过一些例子,但我并没有真正让它们起作用

我的按钮:

<button dojoType="dijit.form.Button" id="myButton">button</button>
按钮
基于此,我找到了销毁dojo小部件的充分方法:

dijit.registry.forEach(function(w){
                  w.destroy();             
          });

如果要注销特定的小部件,可以使用它们的
destroy()
destroy recursive()
方法。第二个会销毁您正在销毁的小部件中的任何小部件(即,在表单小部件上调用destroyRecursive也会销毁所有表单组件)

在您的情况下,听起来您最好在
jQuery.load
-

var widgets = dijit.findWidgets(<containerDiv>);
dojo.forEach(widgets, function(w) {
    w.destroyRecursive(true);
});
var widgets=dijit.findWidgets();
forEach(小部件、函数(w){
w、 (真);
});
上面的代码将注销
中的所有小部件,并保留其关联的DOM节点。要销毁DOM节点,请将
false
传递给
destronRecursive

参考:

这对我很有效:

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

我认为您最好从按钮中删除id,并使用附加点访问它。您基本上可以执行
按钮


然后在您的代码中,您可以像
this.myButton….
一样访问它,但是我不确定您使用的是哪个版本的dojo。这将解决任何id问题,因为dojo将自动为其分配唯一的id。

其他正在寻找解决方案的人:请参阅下面的答案,了解非递归解决方案。这正是我所寻找的。非常感谢!