Extjs Grid - 删除所有记录都有条件

时间:2013-07-22 02:09:06

标签: extjs grid extjs4.1 delete-record

我有一个网格,一个按钮将在 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);   
                    }
                });
            }
        }
        ]

1 个答案:

答案 0 :(得分:2)

问题在于“每个”循环。删除循环中的项目正在改变商店大小,因此只有部分项目被删除。

要解决此问题,您可以按相反的顺序遍历商店,然后按以下方式删除:

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);
                }
            }

        }
    }
    ],