Ext中,关于combobox的取值问题一直困扰着很多程序员,刚刚我摸索了好久,终于找出了些规律。
下面这个是我的combo的代码(节选)
{ fieldLabel:"用户身份", xtype:"combo", id:"status_id", width:145, editable:false, //不可编辑 hiddenName:'identity', displayField:"name", valueField:"level", store:myStore, mode:"remote", emptyText:"请选择登录身份", allowBlank:false, blankText:"用身份不能为空,请选择!", triggerAction:"all"//每次选中一项,之后再选也会将所有列表显示出来。 }
其中myStore如下:
var myStore = new Ext.data.Store({ url:"tools/XmlReader.aspx?xml=roles.xml", //这里,有一个知识点,我另写一篇博客再介绍 reader:new Ext.data.XmlReader({ record:"role", id:"id" },["name","level"]) });
试了四种取值方式,结果分别如下:
myForm.form.findField("name").getValue() --->displayField中的值,即下拉时看到的值
myForm.form.findField("name").getRawValue() --->也是displayField中的值
myForm.form.findField("identity").getRawValue() --->也是displayField中的值
myForm.form.findField("identity").getValue() --->valueField中的值
这种设计方式确实很另人困惑
其实在combobox中 ,hiddenName 和 id 属性的区别是,id只能得到下拉时看到的文字,而hiddenName才是提交到后台的value。如果没有设置hiddenName,在后台是接收不到值的,这个大家一定要注意。getValue() 得到的是combobox 的 value 值,getRawValue() 得到的是显示出来的值,所以我们一般只需要设置一下displayField 和 valueField ,再设置一下hiddenName 就可以获得两种值了。