0

私はグリッドを持っており、ボタンはhttp://jsfiddle.net/9zB8R/
のような私のフィールドで削除されますfields: ['id', 'name', 'type']。私ならtype == delete削除します。
次のようなデータを初期化します。

var simpleData = [];
    var store = new Ext.data.ArrayStore({
        fields: ['id', 'name', 'type'],
        data: simpleData
    });
    for (i = 0; i < 20; i++) {
        simpleData.push({id:''+i+'', name: 'name'+i, type: 'delete'});    
    }
    //this record will not delete
    simpleData.push({id:'20', name: 'enable', type: 'enable'});    

    store.loadData(simpleData);

以下のような tbar がありますが、すべてのレコードを削除することはできませんtype == delete。どうすれば修正できますか。ありがとう。

tbar:[
        {    
            text:'Delete all type = delete',
            handler:function(){
                store.each(function(item, idx) {
                    if (item && item.get('type')=='delete') {
                        store.removeAt(idx);   
                    }
                });
            }
        }
        ]
4

1 に答える 1

2

問題は「each」ループにあります。ループ内のアイテムを削除すると、ストアのサイズが変化するため、一部のアイテムのみが削除されます。

これを回避するには、ストアを逆の順序でループしてから、以下のように削除します。

var grid = new Ext.grid.GridPanel({
    width: 400,
    height: 600,
    store: store,
    loadMask: true,
    renderTo: Ext.getBody(),
    tbar:[
    {    
        text:'Delete all type = delete',
        handler:function(){
            var i = store.getCount()-1; 
            for (i; i>=0; i--) {
                if (store.getAt(i).get('type')=='delete') {
                    store.removeAt(i);
                }
            }

        }
    }
    ],
于 2013-07-22T03:45:35.990 に答える