我想使用自定义算法过滤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',
...
因此,我不能只将函数添加到我在传递到列表之前手动调用的商店。
答案 0 :(得分:0)
在这种情况下,过滤器可能需要多次遍历商店数据(即记录)以将完整设置减少到所需的设置,我相信(我仍然是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: ...
}
});