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

问题在于“每个”循环。删除循环中的项目正在改变存储大小,因此只有一些项目被删除。

要绕过它,您可以按相反的顺序遍历商店,然后按如下方式删除:

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 回答