在ExtJS中为MultiSelect搜索更改Filter.JS的anyMatch默认值

时间:2016-03-31 16:33:01

标签: search extjs filter multi-select

我有一个多选择绑定到商店,我在其中使用anyMatch: true来允许True to allow any match - no regex start/end line anchors will be added(根据Filter.js中的注释)。我的问题是我需要根据multiselect-search-whole-string的答案来实现这一点,特别是这个小提琴中提供的解决方案https://fiddle.sencha.com/#fiddle/jf5

我想要做的只是设置anyMatch: true,无论如何,所以我在Filter.js中设置它,但这对它的使用没有影响。我在整个代码库中搜索了anyMatch: false的其他实例,唯一的另一个实例是ext-all-debug.js。为什么不设置这些值有效?我不知道可以设置此默认值的其他位置吗?

编辑1

我尝试了不同的覆盖,虽然它没有表现出正确的行为,但这次实际上正在做些什么。我认为,因为嵌入在MultiSelector控件中的search属性中时工作的代码块几乎与MultiSelectorSearch的{​​{1}}方法中找到的一样,这就是我的意思需要专注于覆盖。任何关于调整这个的建议都是非常受欢迎的:

search

编辑2

知道了!关键是最初,因为这段代码嵌入在单例中,我可以通过从调用form.panel传递Ext.define('Ext.overrides.view.MultiSelectorSearch', { override: 'Ext.view.MultiSelectorSearch', search: function (text, me) { var filter = me.searchFilter, filters = me.getSearchStore().getFilters(); if (text) { filters.beginUpdate(); if (filter) { filter.setValue(text); } else { me.searchFilter = filter = new Ext.util.Filter({ id: 'search', property: me.field, value: text, anyMatch: true }); } filters.add(filter); filters.endUpdate(); } else if (filter) { filters.remove(filter); } } }); 来引用该方法。这在全局范围内不起作用,并要求我将方法定义为

me

我希望这有助于那里的人!

1 个答案:

答案 0 :(得分:1)

在ext-all-debug.js中更改是不安全的,当你进行生产构建时,这个文件将不会包含在内。

最好的方法是覆盖Filter类,这是你可以做到的。

Ext.define('Ext.overrides.util.Filter', {
    override: 'Ext.util.Filter',

    anyMatch: true
});

并在Application.js中导入此类

Ext.require([
   'Ext.overrides.util.Filter'
]);