在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.registry.filter / dijit.registry.map 不会迭代,尽管 dijit.registry 充满了已注册的小部件?