combobox初始值的问题

有一个combobox,下拉的选项是从服务器读取的,我想在修改操作的时候,能够根据值自动匹配

使用了setValue()方法,
现在的问题是,页面第一次进入的时候,文本框中显示的是 valueField的值,不是displayField中对应的文本.

但是以后的显示都是正常的(只要不重新刷新页面)

代码如下:
Js代码
  1. modelStore : new Ext.data.Store({  
  2.         proxy : new Ext.data.HttpProxy({  
  3.             url : 'listallmodel.action'  
  4.         }),  
  5.         reader : new Ext.data.JsonReader({  
  6.             root : 'list'  
  7.                 // totalProperty:'totalCount'  
  8.                 }, [{  
  9.                     name : 'modelid',  
  10.                     mapping : 'modelid'  
  11.                 }, {  
  12.                     name : 'model',  
  13.                     mapping : 'model'  
  14.                 }]),  
  15.         remoteSort : false  
  16.     }),  
  17.   
  18.     update_gamefileForm : function(data) {  
  19.   
  20.         var modelStore = this.modelStore;  
  21.         modelStore.load();  
  22.   
  23.         var modelField = new Ext.form.ComboBox({  
  24.             fieldLabel : '机型',  
  25.             name : 'modelid',  
  26.             hiddenName : 'modelid',  
  27.             allowBlank : false,  
  28.             blankText : '机型不能为空',  
  29.             readOnly : true,  
  30.             triggerAction : 'all',  
  31.             anchor : '90%',  
  32.             store : modelStore,  
  33.             mode : 'local',  
  34.             valueField : 'modelid',  
  35.             displayField : 'model'  
  36.             //value:data.modelid  
  37.         });  
  38.         //alert(data.modelid);  
  39.         modelField.setValue(data.modelid);  
  40.         return new Ext.FormPanel({  
  41.             labelAlign : 'top',  
  42.             frame : true,  
  43.             width : 500,  
  44.             fileUpload : true,  
  45.             items : [modelField, {  
  46.                 xtype : 'textfield',  
  47.                 fieldLabel : 'jad文件',  
  48.                 name : 'jad',  
  49.                 allowBlank : false,  
  50.                 anchor : '90%',  
  51.                 height : 20,  
  52.                 inputType : 'file'  
  53.             }, {  
  54.                 xtype : 'textfield',  
  55.                 fieldLabel : 'jar文件',  
  56.                 name : 'jar',  
  57.                 allowBlank : false,  
  58.                 anchor : '90%',  
  59.                 height : 20,  
  60.                 inputType : 'file'  
  61.             }]  
  62.         });  
  63.     }, 
  64. 搞定了
    Java代码
    1. new Ext.form.ComboBox({  
    2.                    allowBlank: false,  
    3.                    allowNegative: false,  
    4.                    triggerAction: 'all',  
    5.                    displayField :'text',  
    6.                    valueField :'v',   
    7.                    //mode : 'local',  
    8.                    id:'test',  
    9.                    store : new Ext.data.Store({  
    10.                             autoLoad : true,  
    11.                             proxy: new Ext.data.MemoryProxy({rows:[{text:'全部',v:'1'},{text:'选项1',v:'2'},{text:'选项2',v:'3'},{text:'...',v:'4'}]}),  
    12.                             reader: new Ext.data.JsonReader({  
    13.                                 root: 'rows',id:'v',remoteSort : false   
    14.                             },[{name:'text'},{name:'v',type:'int'}]  
    15.                             ),  
    16.                             listeners :{  
    17.                                 load:function(){  
    18.                                     Ext.getCmp('test').setValue(2);  
    19.                                 }  
    20.                             }  
    21.                           
    22.                     }),  
    23.                     editable :false,  
    24.                     lazyInit : false,  

    用这样的方法可以起到初始化的作用。
    我查了一下ComboBox的源码,其中onLoad事件是这样写的:
    onLoad : function(){
            if(!this.hasFocus){
                return;
            }
    ...
    后面的是关于初始化value一些操作,但原因在一开头没有focus就return了
  65. Ext.getCmp('test').setValue(2);是把combox里的valueField值初始化了!
  66. 哈哈,我终于搞明白了!
  67. 用这个扩展可以解决问题
    Java代码
    1. Ext.namespace('ux');  
    2. Ext.ux.DefaultingComboBox = function(config) {  
    3.     Ext.ux.DefaultingComboBox.superclass.constructor.call(this, config);  
    4. };  
    5.   
    6. Ext.extend(Ext.ux.DefaultingComboBox, Ext.form.ComboBox, {  
    7.     setValue : function(v) {  
    8.         // 如果远程数据还没有加载,在设值之前先加载一次   
    9.         if (this.mode == 'remote' && this.store.getCount() == 0) {  
    10.             this.store.on("load", function() {  
    11.                 Ext.ux.DefaultingComboBox.superclass.setValue.call(this, v);  
    12.             }, this, {  
    13.                 single : true  
    14.             });  
    15.             this.doQuery(this.allQuery, true);  
    16.         } else {  
    17.             Ext.ux.DefaultingComboBox.superclass.setValue.call(this, v);  
    18.         }  
    19.     }  
    20. }); 

你可能感兴趣的:(java,function,jar,File,服务器,autoload)