【发布时间】:2011-07-24 09:57:02
【问题描述】:
在 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 中删除它的部分。
【问题讨论】:
-
我实际上得到了这个工作。我需要做的是从 BorderContainer getChildren() 然后使用 forEach() destroyRecursive() & destroy()...唷,这令人沮丧的 3 个小时...
-
destroyRecursive应该足够了 - 它调用destroyDescendants和destroy本身。就此而言,我很好奇为什么在您的情况下仅在 BorderContainer 本身上调用destroyRecursive是不够的...
标签: javascript dojo