刚学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