日期:2014-05-16 浏览次数:20516 次
如题,直接上代码,
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