2013-07-22 45 views
1

我有一个网格,一个按钮将http://jsfiddle.net/9zB8R/
我场删除像fields: ['id', 'name', 'type']。如果type == delete我会删除它。
我喜欢初始化数据:ExtJS的网格 - 删除所有记录都有一个条件

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

回答

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

     } 
    } 
    ], 
+0

那的工作以及感谢ü:) – freestyle

相关问题