Ext-JS удалить компонент получил - PullRequest
0 голосов
/ 24 мая 2011

У меня есть компонент, который действует как строка таблицы, которая называется flightLegComponent:

[ flight leg component ] [-] [+]

[ flight leg component] [-] [+]

...

при нажатии кнопки [-] этот компонент должен быть удален с родительской панели.

Я добавил слушателя к кнопке [-], а в слушателе я звоню

this.remove(theFlightLegComponent);

где ' this ' - родительский компонент.

Это вызывает исключение, по-видимому, вы не можете удалить компоненты внутри обработчика событий ... Как правильно его удалить? вызвать метод после задержки?

Новое:

Панели структурированы так:

_flightLegRow: function(removable) {

    var flightLegInput = new xx.yy.zz.search.FlightLegInput({
        columnWidth: .8
    });

    var legId = 'flightLeg-' + this.legs++;

    var c = {

        border: 0,

        width: '90%',

        layout: 'column',

        id: legId,

        items: [

            flightLegInput,

            {
                columnWidth: .2,
                margin: 10,
                border: 0,
                layout: {
                    type: 'column'
                },
                items: [{
                    xtype: 'button',
                    text: '-',
                    disabled: !removable,
                    listeners: {
                        click: Ext.Function.bind(function() {

                            //debugger;
                            this.remove(legId, true);
                        }, this)
                    }
                },{
                    xtype: 'button',
                    text: '+',
                    listeners: {
                        click: Ext.Function.bind(function(){
                            this.add(this._flightLegRow(true));
                        }, this)
                    }
                }]
            }
        ]

    };

    return c;

} 

Ответы [ 2 ]

0 голосов
/ 11 октября 2011

Это код, который вы должны использовать для кнопки: b.ownerCt будетFlightLegComponent, а его ownerCt будет панелью, содержащейFlightLegComponent, так что вы можете удалить ее.

{
    xtype: 'button',
    text: '-',
    disabled: !removable,
    handler: function(b) {
        b.ownerCt.ownerCt.remove(legId, true);
    }
}
0 голосов
/ 24 мая 2011

Вы можете удалить компоненты в обработчиках событий, которые вы должны помнить, чтобы передать правильную область.Если вы удаляете компонент, он может вызывать родительский конфиг autoDestroy, который может полностью удалить его и вызвать исключения нулевого указателя.Я предполагаю, что функция обработчика кнопки вызывается в области видимости кнопки и вызывает исключение this.remove не определено.Любой код или сообщение об исключении будет полезно для выявления проблемы.

new Ext.button.Button({
    handler: function(){this.remove......},
    scope: this
})
...