刚学EXT,发现很多问题。其中一个就是combobox显示的值和传递到服务端的值是一样的,也就是displayValue,后来查询相关资料发现,Ext已经对select下拉框进行重构,

 

由很多div和css组成,所以直接设置它的值是不行的。要添加一个hiddenName属性,如:

 

var producttypeCombo = new Ext.form.ComboBox({
     emptyText: '请选择',
     allowBlank : false,
     mode: 'remote',
     triggerAction: 'all',
     displayField: 'fname',
     valueField: 'fcode',
     id:'fstorage_',
     hiddenName:'fstorage',
     fieldLabel:'仓库',
     editable:false,
   readOnly: false, 
   store : new Ext.data.JsonStore( {
   url : './fyDepot.ered?reqCode=queryAllFyDepot',
   root : 'ROOT',
   fields : [ 'fname', 'fcode' ]
  })        
 });

 

 

设置该值以后,Ext会自动生成一个隐藏的input,用来保存真正的值:

 

通过这种方法设置以后,选择某个值是能将正确的值传递到服务端了,可是初始化的时候要显示值,查询ext文档发现两个方法:

setRawValue()//设置显示值

setValue()//设置真正值

但是通过setRawValue后怎么也不能把显示值设置到combobox,后来查看ext源码,

/**
     * Sets the underlying DOM field's value directly, bypassing validation.  To set the value with validation see {@link #setValue}.
     * @param {Mixed} value The value to set
     * @return {Mixed} value The field value that is set
     */
    setRawValue : function(v){
        return this.rendered ? (this.el.dom.value = (Ext.isEmpty(v) ? '' : v)) : '';
    },

 

必须等待combobox渲染以后,设置才有效,设置代码放到 grid的reload的回调函数callback中后,终于生效了。

E_grid.getStore().reload({
		   callback: function(records, options, success){ 
		Ext.getCmp("fstorage_").setRawValue(record.get("storage_name"));
			}, 
		params : {
		start : 0,
		limit : 10,
		forder:record.get("forder")
	}});

 

 

 

 另combobox设置值的方法见http://leoyy.iteye.com/blog/1551299