2015-08-17 90 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

相關問題