在 Dojo / Dijit 中销毁TabContainer
内的小部件的正确方法是什么?
对于每个标签我正在加载新的BorderContainer
,其中基本上包含一个包含任何小窗口小部件的窗口小部件。但现在我正试图让它与标签控件一起使用,以便在加载新标签之前销毁前一页,我就卡住了。现在我使用全局变量来存储活动窗口小部件名称,当用户单击新选项卡时,它从全局变量中获取活动窗口小部件的id并销毁它,然后继续加载新的活动窗口小部件。这有效,但当我摧毁了一次小部件时,我无法让它再次出现。我收到这个错误:
未捕获错误:尝试使用id == widget_foo_container注册小部件,但该ID已经注册“。
我正在为所有小部件使用widget_XXX_container
id,因此XXX
将替换为小部件的ID。
我目前正在使用d ijit.byId('widget_foo_container').destroy()
,但它似乎没有完成这项工作。我也尝试了destroyDecendant()
和destroyRecursive()
,但它们也没有产生想要的效果。似乎我可能会错过一个实际上完成销毁小部件的部分,而不是仅仅从DOM中删除它。
答案 0 :(得分: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>