Reputation: 1258
I am using a filter for a store. The problem is that I want to return an exact match.
For example:
If I am filtering for aa-1
in a grid it will show aa-1
and aa-1***
but if I want only see everything with aa-1
.
I use this to filter:
listeners: {
itemclick: function() {
var data = grid.getSelectionModel().selected.items[0].data;
store.clearFilter();
store.filter('productsCat', data.productsCat);
}
}
What do I have to do to do an exact match?
Upvotes: 4
Views: 34948
Reputation: 618
For ExtJS 4, you can simply use exactMatch and caseSensitive config options:
store.filter({
property: fieldName,
value: fieldValue,
exactMatch: true,
caseSensitive: true
})
Upvotes: 14
Reputation: 13546
You didn't mention what version of ExtJS you are using but here are two general approaches:
Provide a regexp with exact mathing pattern:
store.filter('productsCat', new RegExp('^' + Ext.escapeRe(data.productsCat) + '$'));
or
Provide your own matching function to filterBy
store.filterBy(function(rec) {
return rec.get('productsCat') === data.productsCat;
});
Upvotes: 3
Reputation: 20067
You could use a regular expression in the filter to perhaps ensure that the comparison value was the end of the phrase.
Either that, or use the filterBy() method to define a comparison function, e.g.:
store.filterBy(this, function(rec, id) {
if(rec.get('thefieldtocompare') === "what you want to compare against") {
return true;
}
else {
return false;
}
});
Upvotes: 5