我尝试了这种不同的方法,但仍然无法让过滤器工作。我的 ext 应用程序允许用户从组合框中选择单个状态,下面的网格会显示有关所选“值”=状态的更多数据。在选择时,组合框会触发一个过滤网格存储并更新存储的函数...这是我的网格商店...
var store = Ext.create('Ext.data.Store', {
autoLoad: true,
id: 'OurData',
pageSize: 20,
pageNumber: 1,
remoteSort: true,
fields: [
{ name: 'States' },
{ name: 'FullName' },
{ name: 'Capital' },
{ name: 'Population' }
],
proxy: {
type: 'ajax',
url: 'GetState/getS',
reader: {
type: 'json',
root: 'myTable',
idProperty: 'States',
totalProperty: '@count'
}
}
});
store.loadPage(1);
这是我的组合框
xtype: 'combo',
id: 'iccombo',
scope: this,
store: this.Combostore,
fieldLabel: 'Short State',
displayField: 'States',
valueField: 'States',
typeAhead: true,
triggerAction: 'all',
queryMode: 'remote',
name: 'State',
labelWidth: 125,
anchor: '95%',
listeners: {
scope: this,
select: this.fireFilter
}
这就是过滤器应该发生的地方......
fireFilter: function (value) {
// Get passed value
this.selectedC = value.getValue();
console.log('selectedValue: ' + this.selectedC);
// Clear existing filters
this.store.clearFilter(false);
// Build filter
var myfilter = Ext.create('Ext.util.Filter', {
scope: this,
filterFn: function (item) {
var fieldNames = item.fields.keys;
for (var j = 0; j < fieldNames.length; j++) {
var fieldName = fieldNames[j];
if (item.data[fieldName] != null) {
var stringVal = item.data[fieldName].toString();
if (stringVal != null && stringVal.toLowerCase().indexOf(value.toLowerCase()) != -1) {
return true;
}
}
}
return false;
}
});
// Apply filter to store
this.store.filter(myfilter);
}
当我运行代码时,它会显示网格中的所有数据,并且在选择组合框时,它仍然显示相同的数据。由于某种原因,代码永远不会通过 filterFn 运行...因为我的 console.log 没有显示这是我在萤火虫的回应中得到的
_dc 1352902173425
filter [{"property":null,"value":null}]
limit 20
page 1
start 0
如您所见,选定的“值”为空,但我的“console.log”打印了选定的值...我认为我获取传递值和应用过滤器的方式不正确...有人可以请看看...谢谢
更新...我能够进入函数内部,并且我的 console.log 显示所有字段...但是一旦我到达最后一个 if 语句...我收到此错误
TypeError:value.toLowerCase 不是函数
我在这里做错了什么?谢谢