2016-10-19 6 views
1

У меня есть компонент с рядом подкомпонентов. В следующем коде я получаю компонент, а затем получаю все его дочерние компоненты с '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); 
    }) 

В привилегии не удаляются, вместо этого я получаю сообщение:

Пытались удалить компонент, который не существует. Ext.container.Container: remove принимает аргумент компонента remove. Недопустимое использование cmp.remove().

Я пытался дублировать эту проблему в скрипке, и, конечно же, она прекрасно работает :( https://fiddle.sencha.com/#fiddle/1irm

Почему мой случай не работает?

+0

Мог это то, что cls = ngp также находится на контейнере? Вы можете попробовать: _var comps = Ext.ComponentQuery.query ('[cls = ngp]', ptp) _ – chrisuae

ответ

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), так Сенч может позаботиться о каких-либо проблемах браузера.)

+0

благодарю так много –