我正在使用extJs 3.4组合框自动完成,我希望自动完成搜索可以互换地处理字符位置。 例如,当我输入“v”时,它会自动填充到vanessa(它运行良好)但是当我输入“a”时它不会自动完成。 我想通过任何网站中的任何字符(存在)自动完成。 像这样的东西 a - 凡妮莎,丹妮拉 s - 凡妮莎 或者ssa - vanessa
这是我的代码
xtype: 'combo',
fieldLabel: 'prov',
id : 'lang',
store:[['tr','vanessa'],['ru','daniela'],['en','English']],
mode: 'local',
triggerAction: 'all',
selectOnFocus:true,
listeners: {
afterrender: function(combo) {
var recordSelected = combo.getStore().getAt(1);
combo.setValue(recordSelected.get('field1'));
}
}
谢谢你,我为我的语法道歉并不是很好。
答案 0 :(得分:1)
您必须稍微改变doQuery
方法的行为。正如你在代码中看到的那样,我们很幸运,因为有一个事件让我们有机会这样做而不会过多地破解组合:)此外,如果我们将正则表达式传递给商店的filter
方法,它将忽略它的其他论点(我们想要传递的是anyMatch
......但是这个组合并没有给我们机会。)
所以,我们只需挂钩此事件并将query
字符串属性转换为正则表达式!方法如下:
Ext.create({
xtype: 'combo',
renderTo: Ext.getBody(),
fieldLabel: 'prov',
id: 'lang',
store: [
['tr', 'vanessa'],
['ru', 'daniela'],
['en', 'English']
],
mode: 'local',
triggerAction: 'all',
selectOnFocus: true,
listeners: {
beforequery: function(q) {
// we don't want to crash if there's nothing in there
if (q.query) {
// we need the length later in the doQuery function,
// for respecting minChars
var length = q.query.length;
q.query = new RegExp(Ext.escapeRe(q.query));
// pretend I am a string, eh eh
q.query.length = length;
}
}
}
});
您可能希望覆盖Ext.form.ComboBox
类以将其添加为选项(我将其称为anyMatch
),因为这是一个非常常见的要求。