Extjs 如何为Ext.data.Store实现自定义筛选算法

Extjs 如何为Ext.data.Store实现自定义筛选算法,extjs,sencha-touch-2,Extjs,Sencha Touch 2,我想使用自定义算法筛选Ext存储。JSON/AJAX代理返回>100条记录,我需要根据一些标准将记录数减少到前5名 怎么做不是算法而是在哪里触发 我目前的方法是使用这样一个自定义阅读器 Ext.define('MyReader', { extend : 'Ext.data.reader.Json', alias : 'reader.myReader', getResponseData : function(response) { var data = this.callPa

我想使用自定义算法筛选Ext存储。JSON/AJAX代理返回>100条记录,我需要根据一些标准将记录数减少到前5名

怎么做不是算法而是在哪里触发

我目前的方法是使用这样一个自定义阅读器

Ext.define('MyReader', {
  extend : 'Ext.data.reader.Json',
  alias : 'reader.myReader',

  getResponseData : function(response) {
    var data = this.callParent([response]);
    // algorithm
    return filteredData;
  }
});
Ext.define('SunApp.store.Stations', {
  extend: 'Ext.data.Store',
  requires: ['MyReader'],

  config: {
    model: 'SunApp.model.Station',
    autoLoad: true,
    proxy: {
      type: 'ajax',
      url: 'data.json',
      reader: {
        type: 'myReader'
      }
    }
  }
});
但我更愿意将算法基于存储模型,而不是原始JSON数据。因此,我希望在数据加载到存储中时/之后进行过滤。请注意,当显示列表视图时,存储由Ext隐式创建:

Ext.define('SunApp.view.Stations', {
  extend: 'Ext.List',
  xtype: 'stations',

  config: {
    title: 'Stations',
    store: 'Stations',
    ...

因此,我不能在将函数传递到列表之前将其手动调用的函数添加到存储中。

在这种情况下,过滤器可能需要遍历存储数据,即记录多次,以将整个集合减少到所需的集合,我相信我仍然是Sencha新手。。。以下情况可能很好:

编写加载事件侦听器 做神奇的过滤 通过过滤后的数据调用存储上的setData 因此,与其在读卡器中进行过滤,不如如下所示:

Ext.define('SunApp.store.Stations', {
  extend: 'Ext.data.Store',
  config: {
    model: ...,
    sorters: [...],
    listeners: {
      load: function(store, records, success, eOpts) {
        var filteredRecords = filter(records);
        store.setData(filteredRecords);
      }
    },
    proxy: ...
  }
});