ExtJS:如何让用户在Combobox中输入一个不存储的值

时间:2015-08-17 20:32:36

标签: events select extjs combobox listener

我有一个组合框,它是各种地址的列表。选择任何地址后,select事件会在地图上绘制此地址。我想以这样的方式更改此程序:如果用户输入的地址不是Combo商店的一部分,则该地址仍应在地图上绘制。我不需要修改组合商店。如何才能做到这一点?什么事件监听器可以触发此类事件?我是否需要切换到文本字段?

{
                xtype: 'combobox',
                name: 'address1',
                style: {
                    marginLeft: '15px'
                },
                store: Ext.create('MyStore'),
                valueField: 'address',
                displayField: 'address',
                triggerAction: 'all',
                emptyText: 'Select Address',
                typeAhead: true,
                minChars: 2,
                typeAheadDelay: 100,
                queryMode: 'remote',
                width: 300,
                queryParam: 'searchAddress',
                hideTrigger:true,
                listeners: {                        
                    select: function(combo, records, eOpts){
                        //Plot the address from records[0].data.address
                    }
                }
            }   

1 个答案:

答案 0 :(得分:0)

  

用户可以按回车键表示该地址是其中之一   选择或输入。目前,特殊键事件不能总是   捕获它,因为在输入而不是输入值,它   选择商店中的第一个值

如果显示下拉列表,

specialkey确实无法捕获。这是因为事件是在keydown上模拟的,下拉列表故意停止,因为可以看到here

仍然有办法对用户输入做出反应:

方法1

使用这样的自定义onFieldMutation方法:

Ext.define('MyCombo', {
    extend: 'Ext.form.ComboBox',
    onFieldMutation: function(e) {
        if (e.getKey() === e.ENTER) {
            // Call address plotting method here
        }
        return this.callParent(arguments);
    }
});

方法2

使用keyup

listeners: {
    keyup: {
        fn: function(e) {
            if (e.getKey() === e.ENTER) {
                // Call address plotting method here
            }
        },
        element: 'inputEl'
    }
}

查看两种方法:https://fiddle.sencha.com/#fiddle/sdf