0

localStorage ストアから取得したいくつかのフィルターを適用しようとしています。

ストアをロードし、いくつかのフィルターを適用できます。

var newsStore = Ext.getStore("cityStore");

newsStore.filter(Ext.create('Ext.util.Filter', {
  filterFn: function(item) {
    return item.get('name') == 'city1' || item.get('name') == 'city2';  
}
}));

しかし今、アイテムのリストがあり、リスト内のすべてのアイテムを繰り返し処理して、ストア フィルターに適用したいと考えています。

問題は、ループを反復して return item.get('name') == 'variable' を何度も繰り返すことができないということです。これは、最後のリターンのみをフィルタリングするためですが、リスト内のすべてのアイテムを適用したい上記のフィルターのように。

ここで助けが見つかることを願っています...

ありがとう!

4

1 に答える 1

2

Imaging you have an array containing the names you have to use for filtering the store, we will call this array 'names':

var names = ['Lucas', 'Pablo', 'Noelia'];

What you have to do in your filterFn is return true if the record contains some of the values listed in your names array. The magic is in the some function.

store.filter(Ext.create('Ext.util.Filter', {
  filterFn: function(item) {
      return names.some(function(name){ return name === item.get('name')});  
  }
}));

For example, the following store will only contain 2 rows (after apply the filter): Lucas and Pablo:

var names = ['Lucas', 'Pablo', 'Noelia'];

var store = Ext.create('Ext.data.ArrayStore', {
    fields: ['id', 'name'],    
    data: [
        [ 1, 'Lucas' ],
        [ 2, 'Pablo' ],
        [ 3, 'Francisco' ]
    ]
});

store.filter(Ext.create('Ext.util.Filter', {
  filterFn: function(item) {
      return names.some(function(name){ return name === item.get('name')});  
}
}));

// display the filtered record in the console
store.each(function(record){ console.log(record.get('name'))})​

You also can do it working here: http://jsfiddle.net/lontivero/5TWq9/3/

I hope this is useful. Good luck!

于 2012-12-10T01:49:48.857 に答える