无法删除组件(尝试删除不存在的组件)

时间:2016-10-19 16:40:57

标签: extjs extjs4

我有一个包含许多子组件的组件。在下面的代码中,我获取组件,然后使用“ cls = ngp ”获取其所有子组件。然后我迭代它们并尝试从父面板中删除它们。

    var ptp = Ext.ComponentQuery.query('partytoolpanel')[0]; //there is only ever one instance!!

    var comps = Ext.ComponentQuery.query('partytoolpanel [cls=ngp]') //6 objects are returned here!!

    comps.forEach(function (c) {
        ptp.remove(c);
    })

不删除 comps ,而是收到此消息:

  

尝试删除不存在的组件。   Ext.container.Container:remove接受组件的参数   去掉。 cmp.remove()使用不正确。

我试图在小提琴中复制这个问题,当然,它完美地运作:( https://fiddle.sencha.com/#fiddle/1irm

为什么我的案子不起作用?

1 个答案:

答案 0 :(得分:3)

组件查询partytoolpanel [cls=ngp]将匹配该类的所有组件,这些组件位于具有xtype: 'partytool'的组件下面的层次结构中,而不仅仅是直接子项。

container.remove函数只能移除container的直接子元素。

您应该从循环中的直接父级中删除组件:

Ext.each(comps, function (c) {
    c.up().remove(c);
})

(我建议您使用Ext.each(array, fn)代替array.forEach(fn),因此Sencha可以处理任何浏览器问题。)