在Dijit销毁小部件

时间:2011-03-28 11:21:59

标签: javascript dojo

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中删除它。

1 个答案:

答案 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>