您可以覆盖内存代理以满足您的需求,或者,如果您只希望在searchFields
中指定的字段之一中查找字符串,则可以使用指定的convert
方法向模型添加“虚拟”字段。
例如:
// Extend Ext.data.Model or create it. Dealer's choice.
Ext.define('MyLocalModel', {
extend: 'Ext.data.model',
fields: [
...
{
name: 'searchField',
type: 'string',
convert: function(value, record) {
// Get search fields somewhere
var resultArray = [];
for (var i = 0; i < searchFields.length; ++i) {
var searchField = searchFields[i];
var fieldValue = record.get(searchField);
resultArray.push(fieldValue);
}
// Join by a string that would not normally be searched
// so that field values 'foo' and 'bar' are not valid when searching 'ooba'
var result = resultArray.join('**');
return result;
}
}
]
});
所有你需要在店里做的就是:
store.filter('searchField', searchText);
这不正是你所寻找的东西,但它应该完成这项工作。
// Filter the resulting array of records
if (filters && filters.length) {
// Total will be updated by setting records
resultSet.setRecords(records = Ext.Array.filter(records, Ext.util.Filter.createFilterFn(filters)));
resultSet.setTotal(records.length);
}
所以,如果你想使用不同的过滤逻辑,您可以:
感谢的想法,但我有很多数据,我认为〜加倍它可能会影响性能(也许我错了,病检查)所以我试图找到一个不同的解决方案。看起来我没有别的选择,只能覆盖代理并使用第二个存储。 –
是的,这并不理想。对于大部分数据,我建议创建一个自定义代理。 – MarthyM