4

我正在为商店使用过滤器。问题是我想返回一个完全匹配的。

例如:

如果我aa-1在网格中过滤它会显示aa-1aa-1***但如果我只想看到所有内容aa-1

我用它来过滤:

listeners: {
    itemclick: function() {
        var data = grid.getSelectionModel().selected.items[0].data;
        store.clearFilter();
        store.filter('productsCat', data.productsCat);
    }
}

我该怎么做才能进行精确匹配?

4

3 回答 3

14

对于 ExtJS 4,您可以简单地使用 exactMatch 和 caseSensitive 配置选项:

store.filter({
  property: fieldName,
  value: fieldValue,
  exactMatch: true,
  caseSensitive: true
})
于 2012-11-06T13:20:21.687 回答
5

您可以在过滤器中使用正则表达式来确保比较值是短语的结尾。

要么,要么使用 filterBy() 方法来定义比较函数,例如:

store.filterBy(this, function(rec, id) {
    if(rec.get('thefieldtocompare') === "what you want to compare against") {
        return true;
    }
    else {
        return false;
    }
});
于 2012-08-16T09:58:36.007 回答
3

您没有提到您使用的是哪个版本的 ExtJS,但这里有两种通用方法:

  1. 提供具有精确数学模式的正则表达式:

    store.filter('productsCat', new RegExp('^' + Ext.escapeRe(data.productsCat) + '$'));
    

    或者

  2. 为filterBy提供自己的匹配函数

    store.filterBy(function(rec) {
        return rec.get('productsCat') === data.productsCat;
    });
    
于 2012-08-16T10:02:08.893 回答