在Dijit销毁小部件

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了在Dijit销毁小部件相关的知识,希望对你有一定的参考价值。

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

对于每个选项卡,我正在加载新的BorderContainer,其中基本上包括一个包含任何小部件的小部件。但现在我正试图让它与标签控件一起使用,以便在加载新标签之前销毁前一页,我就卡住了。现在我使用全局变量来存储活动窗口小部件名称,当用户单击新选项卡时,它从全局变量中获取活动窗口小部件的id并销毁它,然后继续加载新的活动窗口小部件。这有效,但当我摧毁了一次小部件时,我无法让它再次出现。我收到此错误:

未捕获错误:尝试使用id == widget_foo_container注册小部件,但该ID已经注册“。

我正在为所有小部件使用widget_XXX_container id,因此XXX被小部件的id替换。

我目前正在使用dijit.byId('widget_foo_container').destroy(),但它似乎没有做到这一点。我也尝试过destroyDecendant()destroyRecursive(),但它们也没有产生想要的效果。似乎我可能错过了一个实际上完成破坏小部件而不是仅仅从DOM中删除它的部分。

答案

看看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>

以上是关于在Dijit销毁小部件的主要内容,如果未能解决你的问题,请参考以下文章

从dijit内部调用父小部件函数复选框更改函数在dgrid内部lopcated

如何禁用“dijit.form.FilteringSelect”小部件?

Dijit TabContainer 小部件图标

如何将 Dijit 小部件动态添加到 Dojo 表单?

dijit.registry.filter / dijit.registry.map 不会迭代,尽管 dijit.registry 充满了已注册的小部件?

使用 dijit.byId w dojox.mobile 小部件