`
songlixiao
  • 浏览: 23140 次
  • 性别: Icon_minigender_1
  • 来自: 青岛
社区版块
存档分类
最新评论

Ext LovCombo用在EditorGridPanel上时选择丢失问题的解决

    博客分类:
  • Ext
阅读更多

        LovCombo是Ext的ux扩展中提供的下拉多选控件。当这个控件用在编辑表格EditorGridPanel上时,下拉选择多个选项后,会出现选中的数据丢失的问题。在网上查找了一下资料,没有找到解决方案,于是只好自己分析。问题解决过程中王亮 给予了大力支持,在此表示感谢!另作本文记录下这个问题的解决方法,与大家分享并备忘。
        首先,说明一下问题的原因。LovCombo这个控件在Ext的示例中存在,并且是可用的,但是示例并没有将它放到EditorGridPanel上使 用,所以没有暴露问题。当这个控件放到EditorGridPanel上后,编辑完成焦点丢失,EditorGrid上的Editor会调用到一个叫做assertValue()的方法。这个方法是Ext的Combo 中 的,LovCombo继承自Combo但没有覆盖此方法。在这个方法的最后调用了this.setValue,将多选控件选中的选项以显示名称加逗号分割 的方式传入到了setValue中。而setValue无法识别这种逗号分割的显示值的字符串,它只支持以逗号分割的value字符串。经过运行后认为传 入的参数认为无法解读,便为控件设置了空值。所以选中的选项丢失了。
        解决这个问题,可以有几种方案。个人选择了比较直接的一种。让LovCombo覆盖掉Combo中的 assertValue方法,不让其把逗号分割的显示值传入到setValue中,而传入给它逗号分割的value值。
        修改
Ext的LovCombo类代码, 里面加入下面的代码:

    // 修正 : 当多选控件放到grid中时,grideditor会调用combobox中的这个方法。将选中的显示值传入到setvalue中,导致选择丢失。  
        ,assertValue : function(){  
            var val = this.getRawValue(),  
                rec,arr_rec,i=0;  
            // 分离value为数组,循环取rec  
            var arr_val = val.split(this.separator);  
            var arr_value = this.value.split(this.separator);  
            for(;i<arr_val.length;i++){  
                if(this.valueField && Ext.isDefined(arr_value[i])){  
                    rec = this.findRecord(this.valueField, arr_value[i]);  
                }  
                if(!rec || rec.get(this.displayField) != arr_val[i].trim()){  
                    rec = this.findRecord(this.displayField, arr_val[i].trim());  
                }  
                if(rec && !arr_rec){  
                    arr_rec = [];  
                }  
                if(rec){  
                    arr_rec.push(rec);  
                }  
            }  
            if(!arr_rec && this.forceSelection){  
                if(val.length > 0 && val != this.emptyText){  
                    this.el.dom.value = Ext.value(this.lastSelectionText, '');  
                    this.applyEmptyText();  
                }else{  
                    this.clearValue();  
                }  
            }else{  
                if(arr_rec && this.valueField){  
                    // onSelect may have already set the value and by doing so  
                    // set the display field properly.  Let's not wipe out the  
                    // valueField here by just sending the displayField.  
                    if (this.value == val){  
                        return;  
                    }  
                    i = 0;  
                    val = "";  
                    var ival;  
                    for(;i<arr_rec.length;i++){  
                        ival = arr_rec[i].get(this.valueField);  
                        if(!ival){  
                            ival = arr_rec[i].get(this.displayField);  
                        }  
                        if(i ==0 ){  
                            val = ival;  
                        }else{  
                            val = val+","+ival;  
                        }  
                    }  
                }  
                this.setValue(val);  
            }  
        } 

         由于是多选,所以首先分离传入的value值字符串,然后分别找到他们的record,从中取value值拼接字符串,然后交给setValue.为了不引起其他影响,代码修改是尽量保持了combo中assertValue方法的 原有代码逻辑。
         有了这段代码LovCombo就可以正常的在EditorGridPanel上使用了。
本文由作者本人转载到itEye,
原文 : http://www.oecp.cn/hi/slx/blog/1168441
提供该文档的机构为 OECP社区 ,更多的博客文章可以到 OECP社区 查看。该文档附件欢迎各位转载,在没有获得文章作者许可之前,不得对文章内容或者版权信息进行更改,版权归OECP社区 所有,仅此声明。

分享到:
评论

相关推荐

    可编辑表格Ext.grid.EditorGridPanel

    Ext.grid.EditorGridPanel是Ext JS库中的一个组件,主要用于创建具有可编辑单元格的表格。这个组件在数据展示和编辑方面提供了丰富的功能,是构建数据密集型应用的理想选择。下面将详细阐述其特点、工作原理及如何...

    解决editorgridpanel编辑时视图向右移动的问题

    在使用EditorGridPanel进行数据编辑时,用户可能会遇到一个常见的问题,即在单元格编辑过程中,整个视图会向右移动,导致当前编辑的单元格离开视线。这给用户操作带来不便,影响了使用体验。本文将深入探讨这个问题...

    Ext可编辑的tree,EditorGridPanel

    因为项目的需求,实现一个可以编辑的tree,在网上找了一个牛人写的控件.Ext.ux.maximgb.tg.EditorGridPanel 把源码下载下来以后 不能运行,自己根据给出的列子,另写了一个小程序.不过并没有与数据库交互.

    ext 读取xml 可编辑grid

    在EXT JS框架中,"ext 读取xml 可编辑grid"是一个常见的需求,涉及到的主要知识点包括EXT的数据对象、EditorGridPanel的使用以及EXT对XML数据格式的支持。下面将详细阐述这些内容。 EXT JS是一个强大的JavaScript库...

    Ext TreePanel

    编辑时,`EditorGridPanel`会使用这些编辑器来控制用户的输入,并在用户完成编辑后将更改应用到原始数据。此外,确保在提交数据到服务器之前进行有效性验证是至关重要的,因为这可以防止无效或错误的数据被保存。 ...

    EXT核心API详解

    73、Ext.grid.EditorGridPanel类 ……… 62 74、Ext.grid.PropertyGrid类 …………… 65 1、Ext类 addBehaviors(Object obj) : void 对选择的元素 应用事件侦听器,事件名以@附加在结尾,例如 addBehaviors({ ...

    Ext组件说明 Ext组件概述

    TabPanel组件允许在一个界面上展示多个不同页面,每个页面由一个标签表示,用户可以通过点击标签来切换页面。 ##### 3. **TreePanel(树状面板)** TreePanel组件提供了一个层次化的数据展示方式,适用于显示目录...

    Extjs EditorGridPanel中ComboBox列的显示问题

    为了解决这个问题需要在EditorGridPanel的ColumnModel中显示ComboBox的地方使用renderer属性,重新渲染,方法如下: 代码如下: //部门列表 var comboxDepartmentStore = new Ext.data.Store({ proxy: new Ext.data....

    Ext组件描述,各个组件含义

    **2.5 Editor Grid Panel (Ext.grid.EditorGridPanel)** - **xtype**: `editorgrid` - **功能描述**:Editor Grid Panel 是一个支持行级编辑的网格面板。 - **主要用途**:适合于需要对表格中的数据进行编辑的场景...

    Ext3.0 api帮助文档

    - **事件监听器(Event Listeners)**: 可以在组件上添加事件监听器,当特定事件触发时执行相应的函数。 - **事件发布/订阅(Event Publishing/Subscribing)**: 使用Ext.EventObject接口,实现了事件的发布和订阅...

    Ext grid合并单元格

    根据提供的文件信息,我们可以深入探讨如何在 Ext JS 中实现 Grid 的单元格合并功能。此案例主要涉及到了自定义 GridView 的 `...总之,在使用 Ext JS 构建复杂应用时,理解并掌握 Grid 组件的高级特性是非常重要的。

    Extjs可编辑的EditorGridPanel

    NULL 博文链接:https://zxf-noimp.iteye.com/blog/629629

    Ext 3.2的一个TreeGrid

    感谢 Ericzhen 远离颠倒梦想,蕴籍无上清凉 这里引用它的资源 仅作分享 http://www.cnblogs.com/Ericzhen/archive/2012/06/11/2545186.html

    EXT2.0 GRID 示例

    3. **行编辑**:EXT GRID支持行内编辑,用户可以直接在表格中修改数据,这需要结合EditorGridPanel和Form Field组件来实现。 4. **排序和过滤**:GRID可以实现列点击排序,通过配置`sortable`属性和`sortInfo`对象...

    Ext 连接数据库的相关操作

    在这个例子中,我们将探讨如何使用EXT连接SQL Server数据库,实现Editgridpanel的数据展示、分页、查询和删除功能。 首先,EXT中的Editgridpanel是一个可编辑的表格组件,用于显示和编辑数据。它集成了数据绑定和行...

    Ext.net后台分页增删改

    Ext.NET是一款基于.NET Framework的JavaScript库,用于构建富交互式的Web应用程序。它扩展了Sencha Ext JS库,提供了与ASP.NET ...希望这个简短的例子能为你在使用Ext.NET时提供一些指导,祝你在下一个项目中取得成功。

    Ext表格控件和树控件

    ### Ext表格控件和树...通过以上内容,我们可以看到 `GridPanel`、`EditorGridPanel` 和 `TreePanel` 在 Ext JS 中的应用非常广泛,它们提供了强大的数据展示和编辑能力,同时也为开发者提供了高度的灵活性和定制性。

Global site tag (gtag.js) - Google Analytics