1

我尝试使用本地数据制作一个网格面板http://jsfiddle.net/8um4T/
这个网格在列中添加和删除 sortable: true,我将按 id 删除记录(但我的方式因大数据而失败)
这是我的数据

var simpleData = [];
var store = new Ext.data.ArrayStore({
    fields: ['id', 'name',],
    data: simpleData
});
for (i = 0; i < 20; i++) {
    simpleData.push({id:''+i+'', name: 'name'+i});    
}
store.loadData(simpleData);

我的 tbar 带有添加按钮

tbar:[
    {    
        text:'Add',
        handler:function(){
            simpleData.push({id:'x', name: 'name'});
            store.loadData(simpleData);
        }
    }
]

我的行动专栏

{
    header: '',
    xtype: 'actioncolumn'
    , width: 50
    , items: [{ // Delete button
        icon: 'http://whatisextjs.com/BAHO/icons/cancel.png',
        tooltip: 'Delete'
        , handler: function(grids, rowIndex, colindex) {
            var record = grid.getStore().getAt(rowIndex);

            //Delete item in array
            // if data is large will don't working
            Ext.each(simpleData, function (items, idx) {            
                if (items.id == record.data.id) {
                    simpleData.splice(idx, 1);
                }
            });     

            //Delete record in store
            grid.store.removeAt(rowIndex); 
        }
    }]
}

如果 mydata 很小,则删除按钮将起作用。我的示例中的数据是 20 条记录,但不起作用

store我的想法是从分配后删除记录simpleData。但是如何做到这一点或有其他方法来解决我的问题谢谢

                    //grid.store.removeAt(rowIndex); 
                    // simpleData = grid.store.data; // my idea is (but how)
4

1 回答 1

1

您需要在拼接数组后通过返回 false 来中断循环。您正在拿走其中一个元素,但循环并没有意识到这一点。所以最后一个元素将是未定义的。

循环将失败,因为最后一个 'items' 参数不是对象。所以“items”不是一个对象,也没有一个id。

结果是您正在从数组中删除该对象,但您从未到达 grid.store.removeAt(rowIndex); 句子。我会做:

Ext.each(simpleData, function (items, idx) {            
  if (items.id == record.data.id) {
    simpleData.splice(idx, 1);
    return false;
  }
}); 
于 2013-07-20T18:39:39.307 回答