【问题标题】:sencha touch filter store from a list?列表中的sencha触摸过滤器存储?
【发布时间】:2012-11-27 07:54:44
【问题描述】:

我正在尝试应用从 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',因为这只会过滤最后一次返回,但我想应用每个项目在列表中作为上面看到的过滤器。

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

谢谢!

【问题讨论】:

    标签: javascript extjs filter sencha-touch store


    【解决方案1】:

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

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

    如果记录包含 names 数组中列出的 一些 值,您必须在 filterFn 中执行的操作是返回 true。神奇之处在于 some 函数。

    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/

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

    【讨论】:

    • 我有一段时间没有在这个项目上工作,但我又试了一次,它成功了!非常感谢!
    猜你喜欢
    • 2011-07-16
    • 2012-09-13
    • 1970-01-01
    • 2011-12-24
    • 2011-11-21
    • 2016-01-11
    • 1970-01-01
    • 2011-08-26
    • 1970-01-01
    相关资源
    最近更新 更多