在Dijit销毁小部件

问题描述 投票:3回答:1

在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中删除它的部分。

javascript dojo
1个回答
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>
© www.soinside.com 2019 - 2024. All rights reserved.