2015-11-17 2 views
0

Мне было интересно, есть ли способ фильтровать уже отфильтрованный магазин. Предположим, у меня есть сетка и два фильтра (F1 & F2). В настоящее время, что я делаю этоОтфильтровать уже отфильтрованный магазин

if(!F1 & !F2) 
{ 
grid.store.load().filterBy(function(record, id){ 
       /*** My function to sort the entire store ***/ 
      }, this); 
} 
else if(F1 & !F2){ 
grid.store.load().filterBy(function(record, id){ 
        /*** My function to sort the entire store ***/ 
       }, this); 
} 
else if (!F1 & F2) { 
grid.store.load().filterBy(function(record, id){ 
        /*** My function to sort the entire store ***/ 
       }, this); 
} 
else if (F1 & F2){ 
grid.store.load().filterBy(function(record, id){ 
        /*** My function to sort the entire store ***/ 
       }, this); 
} 

Я добавляю все больше и больше фильтров для этой сетки, а число «else if» растет в экспоненте ... Кроме того, я фильтрация на 150k + записи, так что перепродажа & & Фильтрация всех записей при любых изменениях может быть довольно дорогостоящей.

То, что я хотел бы это

if (F1){ 
/** filter on the most recent version of the grid **/ 
} 
if (F2){ 
/** filter on the most recent version of the grid **/ 
} 

Надежда Я ясно, спасибо.

ответ

1

Использование store.getFilters().add().

Fiddle

Ext.application({ 
    name: 'Fiddle', 

    launch: function() { 
     var store = new Ext.data.Store({ 
      fields: ['x'], 
      data: (function() { 
       var out = [], 
        i; 

       for (i = 0; i < 100; ++i) { 
        out.push({ 
         x: i 
        }); 
       } 
       return out; 
      })() 
     }); 

     var grid = new Ext.grid.Panel({ 
      store: store, 
      columns: [{ 
       dataIndex: 'x' 
      }], 
      renderTo: Ext.getBody() 
     }); 

     setTimeout(function() { 
      store.getFilters().add({ 
       filterFn: function(rec) { 
        return rec.get('x') < 50; 
       } 
      }); 
      setTimeout(function() { 
       store.getFilters().add({ 
        filterFn: function(rec) { 
         return rec.get('x') < 10; 
        } 
       }); 
      }, 1000); 
     }, 1000); 
    } 
}); 
+0

Это то, что я только что закончил сделать, и я вернулся к SO, чтобы написать свой собственный ответ, но ваш нормально, я бы просто добавить, что store.removeFilter() также используется для удаления специальный фильтр – So4ne

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