2015-08-17 45 views
0

我有一个组合框,它是各种地址的列表。当选择任何地址时,选择事件在地图上绘制该地址。我想以这样的方式改变这个程序,如果用户输入的地址不是组合商店的一部分,这个地址仍然应该绘制在地图上。我不需要修改组合商店。如何才能做到这一点?什么事件监听器可以触发这样的事件?我需要交换到文本字段吗?ExtJS:如何让用户在未存储的Combobox中输入值

{ 
       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

用户如何表明他们想要的地址绘制? – Reimius

+0

您必须要求用户明确指出他们想要绘制地址(例如,按Enter或单击),或者您的组合需要更加聪明和体贴,方法是检查用户输入的是否是有效地址可以绘制并绘制一次。 – Greendrake

+0

@Drake - “你的组合需要更加聪明和体贴,通过检查用户输入的是一个有效的地址,这个地址可以被绘制并且一旦出现这种情况就可以绘制它” - 我该怎么做? – KavitaC

回答

0

用户可以按回车键指示地址是 在选择或类型。目前,specialkey事件不能总是 捕捉它,因为在进入,而不是采取价值类型,它 选择在商店

specialkey所述第一值,如果被显示的下拉列表不会被确实捕捉。这是因为该事件是在​​上模拟的,下拉列表故意停止,可以看到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

+0

Thanks @Drake!这是我实现'code'听众的方法:{key():function(me,e,eOpts){if(e.getKey()=== e。进入){// 情节地址 } 元素: 'inputEl' }, 选择:功能(组合,记录,eOpts){// 情节地址 }} – KavitaC

+0

@KavitaC什么//调用地址绘制方法这里的意思? – David

相关问题