2012-02-01 85 views
0

我寫了下面的動態數據上傳組合框的實現。extJS comboBox。動態數據加載

代碼

Loyalty.tools.DictionaryComboBox = Ext.extend(Ext.form.ComboBox, 

{ 
    defaultConfig:{ 

     defaults:{ 
      labelWidth:150 
     }, 
     displayField:'value', 
     valueField:'key', 
     forceSelection:true, 
     mode:'local', 
     typeAhead: true, 
     triggerAction: 'all', 
     selectOnFocus:true 
    }, 

    constructor:function (config) { 
     Ext.apply(config, this.defaultConfig); 
     config['store'] = new Ext.data.Store({ 
      fields:['key', 'value', 'description'], 
      proxy:{ 
       type:'ajax', 
       url:config.dictionaryPath + '/' + config.dictionaryName 
      } 
     }); 
     Loyalty.tools.DictionaryComboBox.superclass.constructor.call(this, config); 
    } 

} 

); 

我用它通過以下方式

  new Loyalty.tools.DictionaryComboBox({ 
       fieldLabel: Loyalty.messages['company.grid.filter.forma'], 
       dictionaryPath: config.dictionaryPath, 
       dictionaryName: 'forma', 
       name: 'forma', 
       id:'forma', 
       allowBlank:true, 
       labelWidth:config.labelWidth 
      }), 

我有兩個問題 1)我怎樣才能獲得列表數據時,組合框加載中(相當比第一次點擊) 2),如果我在組合框中鍵入一個鍵,以便它立即顯示所需的值?

回答

1

1)你是如何加載商店。我認爲你需要添加自動加載:真像這樣

fields:['key', 'value', 'description'], 
autoLoad: true, 

2)你要問我如何選擇組合框

var mycombo = Ext.getCmp('mycombo'); 
mycombo.setValue(id); 
+0

沒有一個還是其他沒有工作.... 1)名單真的加載在開始,但隨後當你在它 2)單擊不承擔更精確的值設置爲duplicateloading,但沒有顯示。 我認爲所有這一切與事實,第一次加載,如果忽略 – yaroslavTir 2012-02-01 14:44:21

+0

嘗試queryMode:'本地',而不是模式:'本地' – frosty 2012-02-02 15:51:26

+0

嗨。我決定了我的問題。不幸的是,我不得不使用「正確的」方法 – yaroslavTir 2012-02-08 10:58:34

1

我決定了我的問題。不幸的是,我不得不使用「正確的」方法

Loyalty.tools.DictionaryComboBox = Ext.extend(Ext.form.ComboBox, 
    { 
     defaultConfig:{ 

      defaults:{ 
       labelWidth:150 
      }, 
      displayField:'value', 
      valueField:'key', 
      forceSelection:true, 
      queryMode: 'local', 
      typeAhead: true, 
      triggerAction: 'all', 
      selectOnFocus:true 
     }, 

     constructor:function (config) { 
      Ext.apply(config, this.defaultConfig); 
      var isStoreProvided = (config['store'] == undefined); 
      if (isStoreProvided) { 
       var el = this; 


    config['store'] = new Ext.data.Store({ 
       fields:['key', 'value', 'description'], 
       autoLoad:true, 
       proxy:{ 
        type:'ajax', 
        url:config.dictionaryPath + '/' + config.dictionaryName 
       }, 
       listeners: { 
        'load': function() { 
         if (config['initialValue'] != undefined) { 
          el.setValue(config['initialValue']); 
          config['initialValue'] = undefined; 
         } 
        } 
       } 
      }); 
     } 
     Loyalty.tools.DictionaryComboBox.superclass.constructor.call(this, config); 
    } 

} 

);