如题,直接上代码,
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;
}
me.displayTplData = rawvalue;
matchedRecords = newMatchedRecords;
me.lastSelection = me.valueModels = matchedRecords;
if(inputEl && me.emptyText && !Ext.isEmpty(value)) {
inputEl.removeCls(me.emptyCls);
}
me.setRawValue(me.getDisplayValue());
} else {
me.displayTplData = displayTplData;
me.lastSelection = me.valueModels = matchedRecords;
if(inputEl && me.emptyText && !Ext.isEmpty(value)) {
inputEl.removeCls(me.emptyCls);
}
me.setRawValue(me.getDisplayValue());
}
me.checkChange();
if(doSelect !== false) {
me.syncSelection();
}
me.applyEmptyText();
return me;
}
});
2定义一个renderer方法供column使用
var comboRenderer = function(combo) {
return function(value) {
var val = 0;
if(value.indexOf(',') != -1) {
var valarr = value.split(',');
var valstr = '';
for(var i = 0; i < valarr.length; i++) {
val = parseInt(valarr[i]);
var record = combo.findRecord(combo.valueField, val);
valstr += record.get(combo.displayField) + ", ";
}
return valstr.substring(0, valstr.length - 2);
} else {
val = parseInt(value);
var record = combo.findRecord(combo.valueField, val);
return record ? record.get(combo.displayField) : combo.valueNotFoundText;
}
}
}
3column定义时renderer使用上边定义的方法
dataIndex : 'roleNames',
width : 250,
sortable : true,
editor : RoleCombo,
renderer : comboRenderer(RoleCombo)
关于其他的关于gird的写法,rowediting的定义等等的代码,使用和官方的例子一致,这里不再赘述!
网上有一些方法,都没有解决实际问题,比如说定义combo的focus事件,当点击rowediting是这个字段时,显示displayvalue,但是如果点击焦点是grid的别的列,value值就又再次显示出来,只有重写setvalue方法,才能达到满意的效果,大家看看更改的如果有什么问题,请大家批评指正!
分享到:
相关推荐
在EXTJS4中,ComboBox是一个常用的组件,它用于创建下拉选择框,通常用于输入框的辅助选择。这个组件提供了一种用户友好的方式来从一组预定义的选项中进行选择。然而,根据你的标题和描述,你似乎遇到了一个特别的...
在EXTJS中,自动补全(Autocomplete)功能通常用于提升用户输入的效率,它能够根据用户输入的字符快速提供匹配的建议列表。这个功能在许多应用中都非常常见,例如搜索框、表单字段等。EXTJS并没有直接提供一个名为...
在探讨“extjs editgrid combobox 回显”这一主题时,我们主要关注的是如何在ExtJS框架下,实现编辑网格(EditGrid)中的组合框(ComboBox)的值能够正确地回显到网格中。这一功能对于那些需要用户在表单中选择数据...
在本文中,我们将深入探讨EXTJS如何实现ComboBox的级联效果,并理解其数据提交VALUE的工作原理。 首先,我们需要创建两个Store对象,一个用于存储“队名称”(storedm),另一个用于存储“井号”(storejh)。每个...
在EXTJS4中,`ComboBox` 是一个非常常用的组件,它提供了一个下拉选择框的功能。在某些场景下,我们可能需要在下拉菜单中展示更丰富的信息,比如表格数据,这时就可以使用 `GridComboBox`。`GridComboBox` 结合了 `...
在EXTJS4中,下拉菜单树(ComboBox+Tree)是一种高级UI组件,它结合了ComboBox的下拉选择框和TreePanel的树形结构,提供了一种用户友好的交互方式,用于展示层次化的数据。这种组件特别适用于需要从多个选项中进行...
在这个特定的项目“Extjs4---combobox省市区三级联动+struts2”中,我们将探讨如何利用ExtJS 4的ComboBox组件实现省市区的三级联动效果,并结合Struts2框架进行数据交互。 首先,`ComboBox`是ExtJS中的一个组件,它...
在IT行业中,Ext JS是一个广泛使用的JavaScript库,用于构建富客户端Web应用程序。它提供了一套丰富的组件,包括各种类型的输入控件,如ComboBox。在给定的标题“Ext ComboBox 下拉多选框带搜索功能”中,我们关注的...
通过以上内容,我们可以深入了解ExtJS中Combobox组件的使用和配置,从而在实际项目中灵活地创建满足需求的下拉列表。无论是简单的数据选择还是复杂的动态查询,Combobox都是一个强大且实用的工具。在学习和实践中,...
在EXTJS 3.x版本中,Combobox是一个非常实用的组件,它提供了下拉列表功能,用户可以在输入框中输入文字,系统会根据输入内容自动进行模糊匹配,给出相关的建议选项。这种功能在数据筛选、搜索或者选择项较多时特别...
在这个特定的更新中,我们关注的是"Ext.grid.plugin.RowEditing"组件的改进,这是一个用于在网格中进行行编辑的插件。在v1.4版本中,这个插件得到了重构,提升了用户体验和性能,日期为2011年9月11日。接下来,我们...
在Web应用程序中,我们经常需要实现二级联动效果,即一个ComboBox的选择会影响另一个ComboBox的显示内容。这在数据关联和筛选场景中尤为常见,例如省份和城市的关联选择。本文将深入探讨如何在ExtJS中实现ComboBox的...
extJs4 ComboBox 代码组合框实例,ComboBox 各个主要参数详细解释
在 ExtJS3 中,我们可以使用 Ext.extend 来定义类,而在 ExtJS4 中,我们需要使用 Ext.define 来定义类。例如,在 ExtJS3 中,我们可以使用以下代码来定义一个类: ```javascript Ext.ux.PostStore = Ext.extend...
在PropertyGrid中遇到的一个常见问题是当使用Combobox(下拉列表框)作为编辑器时,用户选择的值(displayField)与实际保存的值(valueField)不一致。通常,displayField用于显示用户友好的文本,而valueField则是...
但我们可以根据标题推测,这个项目可能包含了使用jQuery实现的下拉列表组件,具有搜索过滤、动态加载数据等功能,旨在提供一种轻量级的解决方案,适用于那些希望在项目中集成类似ExtJS ComboBox但又不想引入庞大框架...
在这个例子中,当用户在“省份”ComboBox中选择一个省份后,会触发“城市”ComboBox的数据显示更新,只显示对应省份的城市。 通过以上知识点的讲解,相信你对EXTJS中的ComboBox联动有了更深入的理解。在实际开发中...
该资源主要展示了在Extjs6中Combobox控件实现下拉选择多个数据的功能
就是extjs4里面,想给grid里面一格中,文字后面加个小图标。 因为俺们项目就只是文字+图标,所以俺就没有复写Actioncolumn,而是从Column下面继承了一下。。 包含自定义插件源码、效果图等等。