2013-07-22 5 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

Проблема связана с «каждой» петлей. Удаление элементов в цикле изменяет размер магазина, и, следовательно, только некоторые элементы удаляются.

Чтобы обойти это, вы можете петлю через магазин в обратном порядке, а затем удалить, как показано ниже:

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

, который хорошо работает Thanks u :) – freestyle

Смежные вопросы