Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/extjs/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Extjs 无法删除组件(试图删除不存在的组件)_Extjs_Extjs4 - Fatal编程技术网

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

Extjs 无法删除组件(试图删除不存在的组件),extjs,extjs4,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 obj

我有一个包含许多子组件的组件。在下面的代码中,我获取组件,然后使用“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);
    })
comp不会被删除,而是会收到以下消息:

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

我试图用小提琴来重复这个问题,当然,它非常有效:(


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

组件查询
partytoolpanel[cls=ngp]
将匹配该类的所有组件,这些组件位于组件下方层次结构的某个位置,而不只是直接子组件

但是
container.remove
函数只能删除作为
container
直接子级的组件

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

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

(我建议您使用
Ext.each(array,fn)
而不是
array.forEach(fn)
,这样Sencha就可以处理任何浏览器问题。)

可能是cls=ngp也在容器上吗?您可以尝试:var comps=Ext.ComponentQuery.query(“[cls=ngp]”,ptp)