我想根据商店中的数据在客户端进行过滤。
我在商店中有所有信息,我想在这些商店上制作过滤器而不回调服务器。有没有办法做到这一点?。
以下是我的代码:
Ext.each(this.filterFieldsOptions, function(attribute) {
var field = {}},
field =
{
xtype : 'pet.filtermulticombobox',
hideOnSelect : false,
name : 'category',
triggerAction : 'all',
emptyTextKey : _('Categories'),
ref : '../category',
store : new Ext.data.Store({
proxy: new Ext.data.HttpProxy({url: '/pet/product/get-categories-json'}),
reader: new Ext.data.JsonReader({
totalProperty: 'total',
root:'records'
},
[{name: 'id'}, {name: 'name'}, {name: 'name_en'}, {name: 'class'}])
}),
valueField : 'id',
displayField : 'name_en',
classField : 'class',
mode : 'remote',
width : 125,
listWidth : 400,
typeAhead : true,
listeners : {
scope : this,
select : function() {
this.fireEvent('filter');
}
},
filter: {
anyMatch: true,
caseSensitive: true
}
}
;
this);
答案 0 :(得分:0)
下面是我根据年龄过滤商店并在组合框的beforerender事件中应用过滤器的简单示例。
var comboFilter=function(){
var names = Ext.create('Ext.data.Store', {
fields: [
{name: 'name', type: 'string'},
{name: 'age', type: 'int'}
],
data : [
{"name":"x", "age":20},
{"name":"y", "age":25},
{"name":"z", "age":28},
{"name":"xy", "age":30}
]
});
Ext.create('Ext.form.ComboBox', {
fieldLabel: 'Choose name',
store: names,
listeners:{
beforerender:function(thiss){
var me=this;
var store=this.store;
store.filterBy(function(record){
if(record.get('age')>=28){
return false;
}else{
return true;
}
});
}
},
queryMode: 'local',
displayField: 'name',
valueField: 'age',
renderTo: Ext.getBody()
});
}
Ext.onReady(comboFilter);
答案 1 :(得分:0)
我找到了解决方法。我添加了autoLoad:true,用于存储以获取所有数据和使用模式:'local'用于组合框。