Dojo和取消注册小部件

Joh*_*nes 27 dojo toolkit widget

我是Dojo Toolkit的新手.我收到了错误

Tried to register widget with id=myButton but that id is already registered
Run Code Online (Sandbox Code Playgroud)

每当我尝试加载dojo内容两次(意味着我通过jQuery.Load将HTML内容加载到容器div中).有没有办法在dojo中取消注册已注册的小部件?我已经看过一些例子,但我并没有真正让它们发挥作用.

我的按钮:

<button dojoType="dijit.form.Button" id="myButton">button</button>
Run Code Online (Sandbox Code Playgroud)

Jez*_*Jez 37

如果你正在寻找注销特定窗口小部件,你可以使用他们destroy()destroyRecursive()方法.第二个破坏你正在销毁的小部件内的任何小部件(即在窗体小部件上调用destroyRecursive也会破坏所有的表单组件).

在你的情况下,听起来你最好的选择是在此之前做到这一点jQuery.load-

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

上面的代码将取消注册所有小部件<containerDiv>,保留其关联的DOM节点.要销毁DOM节点,falsedestroyRecursive转而使用.

参考:

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


Joh*_*nes 10

基于http://bugs.dojotoolkit.org/ticket/5438,我发现了一种破坏dojo-widget的充分方法:

dijit.registry.forEach(function(w){
                  w.destroy();             
          });
Run Code Online (Sandbox Code Playgroud)


小智 5

这对我有用:

dijit.byId( 'myButton' ).destroy( true );
Run Code Online (Sandbox Code Playgroud)