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

但是现在我有一个项目列表,并且想遍历列表中的所有项目并将它们应用于商店过滤器。

问题是恕我直言,我无法遍历循环并一次又一次地返回 item.get('name') == 'variable' 因为这只会过滤最后一次返回,但我想应用列表中的每个项目如上所示的过滤器。

希望我能在这里找到一些帮助...

谢谢!

4

1 回答 1

2

想象一下,您有一个数组,其中包含您必须用于过滤商店的名称,我们将此数组称为“名称”:

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

如果记录包含您的名称数组中列出的一些值,您在 filterFn 中必须做的是返回 true。神奇之处在于某些功能。

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

例如,以下商店将仅包含 2 行(应用过滤器后):Lucas 和 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'))})​

你也可以在这里工作:http: //jsfiddle.net/lontivero/5TWq9/3/

我希望这很有用。祝你好运!

于 2012-12-10T01:49:48.857 回答