技术交流 > 前端技术 > ExtJs使用Ext.form.ComboBox,显示的是displayField 而不是valueField的解决办法

ExtJs使用Ext.form.ComboBox,显示的是displayField 而不是valueField的解决办法

问题背景: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'
        }



2023-05-07 17:48:52
评论
  • 评论加载中...

评论内容: