日期:2014-05-16  浏览次数:20516 次

extjs4在rowediting中使用combobox,combobox只显示value,不显示displayvalue的解决方案

如题,直接上代码,

1定义一个combo,按照下面的代码重写extjs4中combo的setvalue方法

var RoleCombo = Ext.create('Ext.form.field.ComboBox', {

? ? ? ? ? ? name : 'roleNames',

? ? ? ? ? ? typeAhead : true,

? ? ? ? ? ? editable : false,

? ? ? ? ? ? triggerAction : 'all',

? ? ? ? ? ? lazyRender : true,

? ? ? ? ? ? width : 300,

? ? ? ? ? ? store : me.RoleStore,

? ? ? ? ? ? valueField : 'id',

? ? ? ? ? ? displayField : 'showname',

? ? ? ? ? ? multiSelect : true,

? ? ? ? ? ? queryMode : 'local',

? ? ? ? ? ? selectOnTab : true,

? ? ? ? ? ? allowBlank : false,

? ? ? ? ? ? setValue : function(value, doSelect) {

? ? ? ? ? ? ? ? var canRealValue = (doSelect == undefined);

? ? ? ? ? ? ? ? var me = this, valueNotFoundText = me.valueNotFoundText, inputEl = me.inputEl, i, len, record, dataObj, matchedRecords = [], displayTplData = [], processedValue = [];

?

? ? ? ? ? ? ? ? if(me.store.loading) {

?

? ? ? ? ? ? ? ? ? ? me.value = value;

? ? ? ? ? ? ? ? ? ? me.setHiddenValue(me.value);

? ? ? ? ? ? ? ? ? ? return me;

? ? ? ? ? ? ? ? }

? ? ? ? ? ? ? ? value = Ext.Array.from(value);

?

? ? ? ? ? ? ? ? for( i = 0, len = value.length; i < len; i++) {

? ? ? ? ? ? ? ? ? ? record = value[i];

? ? ? ? ? ? ? ? ? ? if(!record || !record.isModel) {

? ? ? ? ? ? ? ? ? ? ? ? record = me.findRecordByValue(record);

? ? ? ? ? ? ? ? ? ? }

?

? ? ? ? ? ? ? ? ? ? if(record) {

? ? ? ? ? ? ? ? ? ? ? ? matchedRecords.push(record);

? ? ? ? ? ? ? ? ? ? ? ? displayTplData.push(record.data);

? ? ? ? ? ? ? ? ? ? ? ? processedValue.push(record.get(me.valueField));

? ? ? ? ? ? ? ? ? ? } else {

?

? ? ? ? ? ? ? ? ? ? ? ? if(!me.forceSelection) {

? ? ? ? ? ? ? ? ? ? ? ? ? ? processedValue.push(value[i]);

? ? ? ? ? ? ? ? ? ? ? ? ? ? dataObj = {};

? ? ? ? ? ? ? ? ? ? ? ? ? ? dataObj[me.displayField] = value[i];

? ? ? ? ? ? ? ? ? ? ? ? ? ? displayTplData.push(dataObj);

?

? ? ? ? ? ? ? ? ? ? ? ? } else if(Ext.isDefined(valueNotFoundText)) {

? ? ? ? ? ? ? ? ? ? ? ? ? ? displayTplData.push(valueNotFoundText);

? ? ? ? ? ? ? ? ? ? ? ? }

? ? ? ? ? ? ? ? ? ? }

? ? ? ? ? ? ? ? }

?

? ? ? ? ? ? ? ? me.setHiddenValue(processedValue);

? ? ? ? ? ? ? ? me.value = me.multiSelect ? processedValue : processedValue[0];

? ? ? ? ? ? ? ? if(!Ext.isDefined(me.value)) {

? ? ? ? ? ? ? ? ? ? me.value = null;

? ? ? ? ? ? ? ? }

?

? ? ? ? ? ? ? ? if(canRealValue && me.value && me.value.length == 1) {

? ? ? ? ? ? ? ? ? ? var rawvalue;

? ? ? ? ? ? ? ? ? ? var newMatchedRecords=[];

? ? ? ? ? ? ? ? ? ? var value = (me.value)[0];

? ? ? ? ? ? ? ? ? ? if(value.indexOf(',') == -1) {

? ? ? ? ? ? ? ? ? ? ? ? var record = me.findRecord(me.valueField, parseInt(value));

? ? ? ? ? ? ? ? ? ? ? ? if(record) {

? ? ? ? ? ? ? ? ? ? ? ? ? ? rawvalue = record.data;

? ? ? ? ? ? ? ? ? ? ? ? ? ? newMatchedRecords = record;

? ? ? ? ? ? ? ? ? ? ? ? }

? ? ? ? ? ? ? ? ? ? } else {

? ? ? ? ? ? ? ? ? ? ? ? var valarr = value.split(',');

? ? ? ? ? ? ? ? ? ? ? ? var result = [];

? ? ? ? ? ? ? ? ? ? ? ? for(var i = 0; i < valarr.length; i++) {

? ? ? ? ? ? ? ? ? ? ? ? ? ? val = parseInt(valarr[i]);

? ? ? ? ? ? ? ? ? ? ? ? ? ? var record = me.findRecord(me.valueField, val);

? ? ? ? ? ? ? ? ? ? ? ? ? ? if(record) {

? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? result[i] = record.data;

? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? newMatchedRecords[i] = record;

? ? ? ? ? ? ? ? ? ? ? ? ? ? }

? ? ? ? ? ? ? ? ? ? ? ? }

? ? ? ? ? ? ? ? ? ? ? ? rawvalue = result