Dojo破坏DropDownButton上的MenuItems

时间:2013-12-04 12:53:00

标签: javascript dojo

我有以下标记:

<button dojoType="dijit.form.DropDownButton" dojoAttachPoint="labels" label="Labels">
    <div dojoType="dijit.Menu" dojoAttachPoint="labelsMenu"></div>
</button>

我正在以编程方式添加MenuItems,它第一次正常工作。但是当我想要刷新时,我收到一个错误:Tried to register widget with id==16 but that id is already registered。我已经尝试了以下代码来清除但它不起作用:

var labels = dijit.findWidgets(this.labels);
dojo.forEach(labels, function (l) {
    l.destroyRecursive();
});
dojo.empty(dojo.byId(this.labels));

我也尝试使用labelMenu来清空它,但没有运气。有没有其他方法可以在重装数据或丢失某些东西时摆脱所有孩子?

2 个答案:

答案 0 :(得分:0)

我已经解决了,这就是我所做的:     var menuChildren = dijit.byId(this.labelsMenu).getChildren(); if (menuChildren.length > 0){ dojo.forEach(menuChildren, function(mc){ mc.destroyRecursive(); }); }

答案 1 :(得分:0)

在您的代码中,您可以在标签上调用dojo.empty。 dojo.empty()清空DOM中的元素,但保留原始元素。所以尝试在dijit菜单上调用dojo.empty。

dojo.empty(dojo.byId("labelsMenu"));

作为参考,在完全无基础的应用程序中,使用dom-construct模块。

require(["dojo/dom-construct"], function(domConstruct){
  // Empty node's children byId:
  domConstruct.empty("someId");
});