在3.0里面有个BUG,就是选中后,焦点离开的时候,combo的RawValue就没了...
于是分析了下,定位到以下代码:
Js代码
//Ext.form.ComboBox源码
// private
beforeBlur : function(){
var val = this.getRawValue();
if(this.forceSelection){
if(val.length > 0 && val != this.emptyText){
this.el.dom.value = Ext.isDefined(this.lastSelectionText) ? this.lastSelectionText : '';
this.applyEmptyText();
}else{
this.clearValue();
}
}else{
//关键问题所在
var rec = this.findRecord(this.displayField, val);
if(rec){
val = rec.get(this.valueField || this.displayField);
}
this.setValue(val);
}
},
//Ext.form.ComboBox源码
// private
beforeBlur : function(){
var val = this.getRawValue();
if(this.forceSelection){
if(val.length > 0 && val != this.emptyText){
this.el.dom.value = Ext.isDefined(this.lastSelectionText) ? this.lastSelectionText : '';
this.applyEmptyText();
}else{
this.clearValue();
}
}else{
//关键问题所在
var rec = this.findRecord(this.displayField, val);
if(rec){
val = rec.get(this.valueField || this.displayField);
}
this.setValue(val);
}
},
1.先来说说LovCombo的原理,
1)其实它就是在store里面加一个field,用来标记是否选中.(配置项 checkField:'checked')
2)value和rawValue都是通过逗号分隔的值(配置项 separator:',')
2.所以我们看上面的var rec=this.findRecor(this.displayField,val);肯定是得不到, rec为null,这时候value就被设置为val,也就是rawValue,但是如下代码,它的setValue判断的是value,所以自然为null
Js代码
//Ext.ux.form.LovCombo.js
setValue:function(v) {
if(v) {
v = '' + v;
if(this.valueField) {
this.store.clearFilter();
this.store.each(function(r) {
var checked = !(!v.match(
'(^|' + this.separator + ')' + RegExp.escape(r.get(this.valueField))
+'(' + this.separator + '|$)'))
;
r.set(this.checkField, checked);
}, this);
this.value = this.getCheckedValue();
this.setRawValue(this.getCheckedDisplay());
if(this.hiddenField) {
this.hiddenField.value = this.value;
}
}
else {
this.value = v;
this.setRawValue(v);
if(this.hiddenField) {
this.hiddenField.value = v;
}
}
if(this.el) {
this.el.removeClass(this.emptyClass);
}
}
else {
this.clearValue();
}
}
//Ext.ux.form.LovCombo.js
setValue:function(v) {
if(v) {
v = '' + v;
if(this.valueField) {
this.store.clearFilter();
this.store.each(function(r) {
var checked = !(!v.match(
'(^|' + this.separator + ')' + RegExp.escape(r.get(this.valueField))
+'(' + this.separator + '|$)'))
;
r.set(this.checkField, checked);
}, this);
this.value = this.getCheckedValue();
this.setRawValue(this.getCheckedDisplay());
if(this.hiddenField) {
this.hiddenField.value = this.value;
}
}
else {
this.value = v;
this.setRawValue(v);
if(this.hiddenField) {
this.hiddenField.value = v;
}
}
if(this.el) {
this.el.removeClass(this.emptyClass);
}
}
else {
this.clearValue();
}
}
3.修复的办法很简单,
1)重写beforeBlur
Js代码
var combo = new Ext.ux.form.LovCombo({
width:600,
hideOnSelect:false,
maxHeight:200,
store:new Ext.data.SimpleStore({
id:0,
fields:['pid', 'imageName']
}),
triggerAction:'all',
valueField:'pid',
displayField:'imageName',
mode:'local',
<STRONG>beforeBlur:function(){}</STRONG>
});
var combo = new Ext.ux.form.LovCombo({
width:600,
hideOnSelect:false,
maxHeight:200,
store:new Ext.data.SimpleStore({
id:0,
fields:['pid', 'imageName']
}),
triggerAction:'all',
valueField:'pid',
displayField:'imageName',
mode:'local',
beforeBlur:function(){}
});
2)重写findRecord返回多个record,然后在顶上那段粗体部分的代码,遍历record,拼成value,再set进去.
--这个就自己写吧,也不复杂
实例:
http://wwww.qilecn.com:8088/f/ext+combobox+%E5%A4%9A%E9%80%89/Ext2.0%E4%B8%8B%E6%8B%89%E5%A4%9A%E9%80%89%E8%8F%9C%E5%8D%95%28MultiComboBox%29+-+EXT+-+web+-+JavaEye%E8%AE%BA%E5%9D%9B----d3d3LmphdmFleWUuY29tL3RvcGljLzIxNTk3Mg==.html
分享到:
相关推荐
NULL 博文链接:https://dengli19881102.iteye.com/blog/1046190
ExtJS日期多选组件源码 日期一般是单选,有时间有需要选择多个日期的情况,返回一个日期的数组。
Extjs3 多选下拉框LovCombo,Extjs3 多选下拉框LovCombo
该资源主要展示了在Extjs6中Combobox控件实现下拉选择多个数据的功能
Extjs4多选树,支持多选和单选,能够实现默认值选中,数据存放在json,里面有明确的提示信息。很适合初学者借鉴学习
ExtJs grid多选时获取选中的所有值,以及其他相关的操作
本方法和用checkbox, listbox等控件和事件拼凑出来的不同,本方法是一个集成的独立控件,基本实现了控件的顺滑度,下拉框可悬浮等效果,可以认为是comboBox的升级版,使用方便,仅需引用编译好的DLL,直接在toolBox...
Extjs 下拉树 下拉多选树 支持多选 全选/全不选 下拉多选框
extjs中的多选列表,extjs中没有实现多选列表。这是别人作的封装。我找到的。
Extjs3.4.0版本 多选下拉框效果支持多选/全选/全不选 本网站需要12积分下在的,现在共享都给大家
extjs多选 下拉框扩展
extjs异步树,多选树,json数据机构,集成spring,struts例子,extjs异步树,多选树,json数据机构,集成spring,struts例子,extjs异步树,多选树,json数据机构,集成spring,struts例子,extjs异步树,多选树,json...
在网上下载别人的代码,改进加上CHECKBOX ,但是批量删除做不出来,希望高手完成并分享。
Extjs4 comboboxTree下拉树型菜单,完美支持多选、单选,绝对好用。来源于网络,稍作修改。
在Extjs4中,下拉多选得以支持,只需要设置Combobox的multiSelect值为...在官网论坛中,发现了一个插件,这个插件是扩展了Combobox多选功能,使得下拉多选更美观、好用。 更多Extjs4信息,请移步 http://www.mhzg.net
NULL 博文链接:https://lyndon-lin.iteye.com/blog/833120
extjs editgrid combobox 回显extjs editgrid combobox 回显extjs editgrid combobox 回显extjs editgrid combobox 回显
很多同事在用extjs grid做分页的时候,往往会想用grid的多选功能来实现导出Excel之类的功能(也就是所谓的多选记忆功能),但在选选择下一页的时候 上一页选中的已经清除 这是因为做分页的时候又向服务器请求了分页...
extjs 自动补全,模拟下拉列表combobox