ExtJs 3.4组合框自动完成角色位置的互换

时间:2013-09-20 14:50:50

标签: extjs

我正在使用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'));
}

}

谢谢你,我为我的语法道歉并不是很好。

1 个答案:

答案 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),因为这是一个非常常见的要求。