私はこれをさまざまな方法で試しましたが、それでもフィルターを機能させることができません。私の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);
}
コードを実行すると、グリッド内のすべてのデータが表示され、コンボボックスを選択しても同じデータが表示されます。何らかの理由で、console.logが実行されないため、コードがfilterFnを通過することはありません。これは私がfirebugの応答で得たものです
_dc 1352902173425
filter [{"property":null,"value":null}]
limit 20
page 1
start 0
ご覧のとおり、選択した「値」はnullですが、「console.log」は選択した値を出力します...渡された値を取得してフィルターを適用する方法が間違っていると思います...誰かお願いします見てください...ありがとう
更新...関数内に入ることができ、console.logにすべてのフィールドが表示されます...しかし、最後のifステートメントに到達すると...このエラーが発生します
TypeError:value.toLowerCaseは関数ではありません
私はここで何が間違っているのですか?ありがとう