2013-07-22 3 views
1

내가 그리드를 가지고 있고 버튼을 fields: ['id', 'name', 'type']처럼 http://jsfiddle.net/9zB8R/
내 필드에 삭제를 가지고 삭제합니다. 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

감사에게 U를 :) – freestyle