0

次のように、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;

} 
4

2 に答える 2

0

適切なスコープを渡すために覚えておく必要があるイベント ハンドラーのコンポーネントを削除できます。コンポーネントを削除している場合、親の autoDestroy 設定を呼び出している可能性があり、完全に削除され、null ポインター例外が発生する可能性があります。ボタンハンドラーの関数がボタンのスコープで呼び出され、例外 this.remove is undefined をスローしていると推測しています。コードまたは例外メッセージは、問題を特定するのに役立ちます。

new Ext.button.Button({
    handler: function(){this.remove......},
    scope: this
})
于 2011-05-24T04:05:47.357 に答える
0

これは、ボタンに使用するコードです。b.ownerCt は theFlightLegComponent になり、その ownerCt は theFlightLegComponent を含むパネルになります。このようにして削除できます。

{
    xtype: 'button',
    text: '-',
    disabled: !removable,
    handler: function(b) {
        b.ownerCt.ownerCt.remove(legId, true);
    }
}
于 2011-10-11T03:29:27.527 に答える