问题背景:ExtJS的Ext.form.ComboBox控件,设置了displayField和valueField后,下拉时可以正常显示displayField;但移开单元格焦点后会显示valueField,非常不符合实际业务场景。
解决办法:
1.定义ds,即引入字典表中的数据
var statusDS = new Ext.data.SimpleStore({ //通过字典表获得用户使用状态数据源
fields: ['code', 'value'],
data:Ext.data.status //这里对应我在字典表里定义的类型名称
});
2.在grid相应列中加入渲染,即修改ColumnModel某列属性,红色字体部分是核心代码
{
header: '<s:text name="com.label.username"/>',
dataIndex: 'userName',
width: 90,
align: 'center'
},{
header: '<s:text name="com.label.authority"/>',
dataIndex: 'userAuthority',
width: 60,
align: 'center',
editor: new Ext.form.ComboBox({
id:'statusCmb', //为combobox定义一个ID,必须的
hiddenName:'',
store: statusDS, //引入ds
displayField:'value', //值
valueField:'code', //代码
editable:false,
mode: 'local',
triggerAction: 'all'
}),
renderer: function(value, cellmeta, record) {
//通过匹配value取得ds索引
var index = statusDS.find(Ext.getCmp('statusCmb').valueField,value);
//通过索引取得记录ds中的记录集
var record = statusDS.getAt(index);
//返回记录集中的value字段的值
return record.data.value;
}
},{
header: '<s:text name="com.label.email"/>',
dataIndex: 'email',
width: 150,
align: 'center'
}