`
kimmking
  • 浏览: 543746 次
  • 性别: Icon_minigender_1
  • 来自: 中华大丈夫学院
社区版块
存档分类
最新评论

Ext.grid.EditorGridPanel的一个小问题

    博客分类:
  • ext
阅读更多

当一个页面有多个结构相同的Ext.grid.EditorGridPanel时,我们可能定义一个列信息,

var columns = [{},{},{}...]; // 1、这里指定不指定editor,

然后多次使用这个数组初始化各个Grid的ColumnModel:

var cm = new new Ext.grid.ColumnModel(columns);

//2、 或是这里再指定editor,现象都一样。

 

然后就会出现某个Grid的某个列第一次编辑以后,其他Grid的此列都不能编辑了。

说明columns数组或是其中的各个对象被共享了。

翻开3.0源码一看,果然,直接在setConfig方法中this.config = config了,(ps:发现创建editor的代码在source中的和ext-all-debug.js中的代码是不一致的。)。

 

将这个几句代码稍微改改,不直接用config就可以实现共用了。

Ext.grid.ColumnModel.prototype.setConfig =function(config, initial){
        if(!initial){             delete this.totalWidth;
            for(var i = 0, len = this.config.length; i < len; i++){
                var c = this.config[i];
                if(c.editor){
                    c.editor.destroy();
                }
            }
        }
        this.config = [];
        this.lookup = {};
                for(var i = 0, len = config.length; i < len; i++){
            var col = Ext.apply({},config[i]);
            this.config.push(col);
            var c = Ext.applyIf(col, this.defaults);
            
            if(typeof c.renderer == "string"){
                c.renderer = Ext.util.Format[c.renderer];
            }
            if(typeof c.id == "undefined"){
                c.id = i;
            }
            if(c.editor && c.editor.isFormField){
                c.editor = new Ext.grid.GridEditor(c.editor);
            }
            this.lookup[c.id] = c;
        }
        if(!initial){
            this.fireEvent('configchange', this);
        }
    }

 

 

 

0
0
分享到:
评论
3 楼 kimmking 2009-12-17  
yiminghe 写道
我觉得其实 extjs 觉得一个 config 一般是一个组件用(效率考虑,没有深拷贝),没想到你这样一个config多个组件公用,这样的话应该你负责

Object.clone=function(deep){...}
new xx(config.clone(true));

这只是我的想法,你这样子改ext源码麻烦了点,呵呵



和几个人讨论过clone,extjs就是缺少一个json的深度clone方法。
自己实现也不难。
2 楼 yiminghe 2009-12-17  

Object.prototype.clone=function(deep){
//xxxx
}

今年某个公司的笔试题,:)
1 楼 yiminghe 2009-12-17  
我觉得其实 extjs 觉得一个 config 一般是一个组件用(效率考虑,没有深拷贝),没想到你这样一个config多个组件公用,这样的话应该你负责

Object.clone=function(deep){...}
new xx(config.clone(true));

这只是我的想法,你这样子改ext源码麻烦了点,呵呵

相关推荐

    可编辑表格Ext.grid.EditorGridPanel

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

    EXT核心API详解

    EXT核心API详解 1、Ext类 ………………………………… 2 2、Array类 …………………………… 4 ...编码一个对象/数组或其它值为一个json格式字符串(支持对象,数组,日期,字符串) destroy( Mixed arg1, Mixed (optiona

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

    - **功能描述**:Box Component 是一个非常基本的 Ext 组件,主要用于定义具有边框和其他布局属性的基本容器。它可以用来构建更复杂的用户界面组件。 - **主要用途**:作为其他复杂组件的基础结构,如容器或面板等。...

    Ext.grid.GridPanel右键菜单

    右键菜单的资料,代码已经详细描写。请仿照文件中所描述即可使用,不限于EXT4.0以上版本使用。

    ext 读取xml 可编辑grid

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

    ExtJS入门教程(超级详细)

    1、Ext类 ………………………………… 2 2、Array类 …………………………… 4 3、Number类 …………………………… 4 4、...73、Ext.grid.EditorGridPanel类 ……… 62 74、Ext.grid.PropertyGrid类 …………… 65

    给Extjs的GridPanel增加“合计”行

    - 首先,我们需要创建一个继承自EXTJS的`Ext.grid.GridView`的自定义View类。这个类将覆盖默认的渲染逻辑,以便在表格底部插入合计行。 - 在`GridSummary.js`文件中,我们可以定义这个类,并重写`onRender`方法,...

    Ext grid合并单元格

    首先,创建了一个名为 `MyGridView` 的类,该类继承自 `Ext.grid.GridView`。然后,重写了 `renderHeaders` 方法,该方法负责生成 Grid 的表头 HTML 结构。 ```javascript MyGridView = Ext.extend(Ext.grid....

    EXT2.0 GRID 示例

    EXT2.0 GRID 示例是一个基于EXT JavaScript库的高级数据展示和操作组件的实例。EXT是一个强大的前端开发框架,尤其在创建交互式Web应用程序方面表现出色。EXT2.0是EXT库的一个早期版本,它提供了丰富的用户界面组件...

    ext教程1.pdf

    - **表单及元素组件**:`Ext.Editor`(编辑器)、`Ext.grid.EditorGridPanel`(可编辑的表格)等。 EXTJS 的强大之处在于它提供了丰富的组件库和灵活的布局机制,使得开发者可以轻松构建复杂的应用程序界面,同时...

    Ext3.0 api帮助文档

    Ext3.0 API是Ext JS库的一个重要版本,它提供了丰富的JavaScript组件和接口,用于构建交互式的Web应用程序。这个API帮助文档包含了详细的功能说明、示例代码和类库结构,帮助开发者更好地理解和利用Ext3.0的功能。 ...

    老师整理的extjs学习笔记

    `Ext.grid.EditorGridPanel` 是一个扩展了 `Ext.grid.GridPanel` 的组件,允许直接在表格中编辑数据。它结合了表格视图和表单编辑功能,使得数据编辑变得更加直观。 #### 九、Ext.tree.TreePanel -- 树的使用 **...

    ExtJS3总结内容

    例如,要验证一个字段是否为有效的电子邮件地址,可以在`vtype`属性中设置为`email`: ```javascript new Ext.form.TextField({ fieldLabel: 'Email', name: 'email', vtype: 'email' }); ``` #### 结论 通过...

    extjs xtype

    快速提示是EXTJS中的一个小弹出窗口,可以在鼠标悬停在特定元素上时显示相关信息,无需用户进行任何交互。 关于`vtype`,这是EXTJS中表单字段验证的一种方式。EXTJS提供了多种预定义的`vtype`验证规则,如`email`...

    Ext 连接数据库的相关操作

    首先,EXT中的Editgridpanel是一个可编辑的表格组件,用于显示和编辑数据。它集成了数据绑定和行编辑功能,非常适合于数据管理界面。要将Editgridpanel与数据库连接,我们需要创建一个数据源,这通常是通过EXT的...

    ExtJs组件类的对应表

    11. **`editorgrid`** - `Ext.grid.EditorGridPanel`,可编辑的表格组件,允许用户直接在表格中编辑数据。 12. **`propertygrid`** - `Ext.grid.PropertyGrid`,属性表格组件,用于展示对象的属性。 13. **`...

    extJs xtype 类型

    11. **`editorgrid`:** 可编辑的表格组件,允许用户直接在表格中编辑数据,通过`Ext.grid.EditorGridPanel`类实现。 12. **`propertygrid`:** 属性表格组件,用于展示对象的属性列表,通过`Ext.grid.PropertyGrid`...

    ExtJs xtype一览

    - **`editorgrid` (Ext.grid.EditorGridPanel)**: 可编辑的表格组件,允许用户直接在表格内进行数据编辑。 - **`propertygrid` (Ext.grid.PropertyGrid)**: 属性表格组件,专门用于展示对象的属性。 - **`editor` ...

    Extjs实用教程

    - **EditorGridPanel**: `Ext.grid.EditorGridPanel`,可编辑的表格组件。 - **GridPanel**: `Ext.grid.GridPanel`,表格组件。 - **PagingToolbar**: `Ext.PagingToolbar`,分页工具栏。 - **Panel**: `Ext....

Global site tag (gtag.js) - Google Analytics