27

我是 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>
4

4 回答 4

38

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

就您而言,听起来您最好的选择是在此之前执行此操作jQuery.load-

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

上面的代码将取消注册 中的所有小部件<containerDiv>保留它们关联的 DOM 节点。要销毁 DOM 节点,请改为传递falsedestroyRecursive

参考:

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

于 2010-05-04T09:30:22.010 回答
10

基于http://bugs.dojotoolkit.org/ticket/5438,我找到了一个足够的方法来销毁 dojo-widgets:

dijit.registry.forEach(function(w){
                  w.destroy();             
          });
于 2010-05-04T09:16:08.083 回答
5

这对我有用:

dijit.byId( 'myButton' ).destroy( true );
于 2012-05-08T14:18:55.397 回答
1

我认为您最好从按钮中删除 id 并使用附加点访问它。你基本上会做<button dojoType="dijit.form.Button" data-dojo-attach-point="myButton">button</button>

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

于 2015-08-08T15:27:38.467 回答