標籤:
原文地址:http://blog.csdn.net/liuguxing/article/details/8623190
[javascript] view plain copy
- 項目中經常用到選擇框,需要從後台非同步載入資料,可單獨寫一個組件進行載入
[javascript] view plain copy
- App.ComboBox = function(combo){
- var comboBox = new Ext.form.ComboBox({
- store:new Ext.data.JsonStore({
- autoLoad : false, //設定為false,自己控制什麼時候載入資料
- url:__ctxPath+"/code/get.do?name="+combo.codeName,
- root: ‘data‘,
- fields : [‘name‘,‘id‘],
- listeners:{
- load:function(){
- comboBox.setValue(comboBox.getValue());
- }
- }
- }),
- name:combo.name,
- fieldLabel:combo.fieldLabel,
- id:combo.id,
- hiddenName:combo.hiddenName, //動態產生一個以指定名稱命名的隱藏欄位用來存放值資料
- displayField:‘name‘,
- valueField :‘id‘,
- typeAhead:false, //值為true時在經過指定延遲(typeAheadDelay)後彈出並自動選擇輸入的文本,如果該文本與已知的值相匹配
- mode:‘local‘, //如果ComboBox讀取本機資料則將值設為‘local‘(預設為 ‘remote‘ 表示從伺服器讀取資料)。如果設定為remote,並且autoLoad=true,就會載入兩次
- triggerAction:‘all‘,
- emptyText:‘請選擇...‘
- });
- return comboBox;
- };
編輯資料的時候需要預設選中某一項,可編寫函數
[javascript] view plain copy
- App.selectComboBox = function(hiddenName,comboBoxId,value){
[javascript] view plain copy
- <span style="white-space:pre"> </span>//需要根據value擷取到顯示值
- var combo = Ext.getCmp(comboBoxId);
- var range = combo.getStore().getRange();
- if(range != null && range.length>0){
- var displayName = value;
- for(var i=0;i<range.length;i++){
- if(value == range[i].data.id){
- displayName = range[i].data.name;
- }
- }
- }
- combo.setValue(displayName);<span style="white-space:pre"> </span>//設定顯示值<span style="white-space:pre"> </span>
- Ext.query("*[name="+hiddenName+"]")[0].value = value;<span style="white-space:pre"> </span>//設定提交到背景值
- }
需要注意的是,在調用App.selectComboBox之前,必須先調用comboBox.getStore().load(); 載入資料,不然上面getRange()擷取不到資料。
[轉]Ext ComboBox 預設選中某一項