我有一个多选择绑定到商店,我在其中使用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
我希望这有助于那里的人!
答案 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'
]);