2011-03-28 84 views
3

销毁微件内部TabContainer的正确方法是什么Dojo/Dijit销毁Dijit中的微件

为每个标签我加载新BorderContainer基本上包括一个小部件,包括任何小部件。但现在我试图让它与标签控件一起工作,以便在加载新页面之前破坏前一页,我被卡住了。现在,我使用全局变量来存储活动部件的名称,当用户点击一个新的标签,从全局变量取主动控件的ID和毁坏它,然后继续到加载新的活动部件。这种方法很有效,但是当我销毁了一次这个小部件时,我无法再让它出现。我得到这个错误:

Uncaught Error: Tried to register widget with id==widget_foo_container but that id is already registered".

我使用widget_XXX_container ID这么XXX由控件的ID代替了所有小工具。

我目前使用d ijit.byId('widget_foo_container').destroy()但它似乎并没有做的工作。我也曾尝试destroyDecendant()destroyRecursive()但他们不产生想要的效果也。看起来我可能会错过一个实际完成销毁小部件的作品,而不是从DOM中删除它。

+0

我居然得到了这个工作。我需要做的是从BorderContainer getChildren(),然后与forEach()destroyRecursive()和销毁()... pheew,这是令人沮丧的3小时... – jimm 2011-03-28 11:42:53

+1

'destroyRecursive'应该足够 - 它调用destroyDescendants '和'摧毁'本身。对于这个问题,我很好奇,为什么在BorderContainer本身调用'destroyRecursive'并不能满足你的需求...... – 2011-03-29 01:48:18

回答

0

看一看dijit.registry,看看你的小部件仍注册...

例子:

<div id="wrapper"> 
     <div id="btn1" data-dojo-type="dijit.form.Button">Button1</div> 
     <div id="btn2" data-dojo-type="dijit.form.Button">Destroy button 1 
      <script type="dojo/method" data-dojo-event="onClick"> 
       dijit.byId("btn1") && dijit.byId("btn1").destroyRecursive(); 
       console.debug(dijit.registry._hash); 
      </script> 
     </div> 
     <div id="btn3" data-dojo-type="dijit.form.Button">Recreate button 1 
      <script type="dojo/method" data-dojo-event="onClick"> 
       dojo.place(new dijit.form.Button({ label: "Button1", id:"btn1"}).domNode, "wrapper", "first"); 
       console.debug(dijit.registry._hash); 
      </script> 
     </div> 
</div>