`
skzr.org
  • 浏览: 365377 次
  • 性别: Icon_minigender_1
  • 来自: 长沙
社区版块
存档分类
最新评论

[OPEN-848] GroupingStore的一个sort bug

阅读更多

提交官方bug详情:[OPEN-848] GroupingStore sort have a bug when not set the sortInfo of config

 

GroupingStore配置时未配置sortInfo

现象:不要点击任何列进行排序,隐藏其中一列,出现bug!

 

 

//Ext.data.GroupingStore.prototype.sort function
sorters = [this.sortInfo];//have a bug when not set this.sortInfo

 这里sorters 实际是 [null],在接下来的地方会发生bug

//Ext.data.Store.prototype.sortData function
        //create a sorter function for each sorter field/direction combo
        for (var i=0, j = sorters.length; i < j; i++) {
//in fact sorters[0] === null will throw a exception
            sortFns.push(this.createSortFunction(sorters[i].field, sorters[i].direction));
        }

I fix:

Ext.data.GroupingStore.prototype.sort

sorters = this.sortInfo ? [this.sortInfo] : [];
 //old: sorters = [this.sortInfo];

 完整修复:

if (Ext.version == '3.2.0') {
	Ext.apply(Ext.data.GroupingStore.prototype, {
		sort: function(fieldName, dir) {
		    if (this.remoteSort) {
		        return Ext.data.GroupingStore.superclass.sort.call(this, fieldName, dir);
		    }
		
		    var sorters = [];
		
		    //cater for any existing valid arguments to this.sort, massage them into an array of sorter objects
		    if (Ext.isArray(arguments[0])) {
		        sorters = arguments[0];
		    } else if (fieldName == undefined) {
		        //we preserve the existing sortInfo here because this.sort is called after
		        //clearGrouping and there may be existing sorting
		        sorters = this.sortInfo ? [this.sortInfo] : [];
		    } else {
		        //TODO: this is lifted straight from Ext.data.Store's singleSort function. It should instead be
		        //refactored into a common method if possible
		        var field = this.fields.get(fieldName);
		        if (!field) return false;
		
		        var name       = field.name,
		            sortInfo   = this.sortInfo || null,
		            sortToggle = this.sortToggle ? this.sortToggle[name] : null;
		
		        if (!dir) {
		            if (sortInfo && sortInfo.field == name) { // toggle sort dir
		                dir = (this.sortToggle[name] || 'ASC').toggle('ASC', 'DESC');
		            } else {
		                dir = field.sortDir;
		            }
		        }
		
		        this.sortToggle[name] = dir;
		        this.sortInfo = {field: name, direction: dir};
		
		        sorters = this.sortInfo ? [this.sortInfo] : [];
		    }
		
		    //add the grouping sorter object as the first multisort sorter
		    if (this.groupField) {
		        sorters.unshift({direction: this.groupDir, field: this.groupField});
		    }
		
		    return this.multiSort.call(this, sorters, dir);
		}
	});
}
分享到:
评论

相关推荐

    groupingstore小例子

    groupingstore很实用的小例子。适合初学者学习。一看就明白。还有注释。

    extjs grid 多表头插件

    多表头插件是ExtJS Grid的一个重要特性,它允许我们创建具有多层次、复杂结构的表头,以便更好地组织和呈现数据。在ExtJS Grid中,多表头能够帮助用户更清晰地理解列的分组和关系,提高数据的可读性和分析性。 首先...

    整合--Struts2为extjs提供server数据

    例如,在给出的部分内容中,我们可以看到一个使用`Ext.data.GroupingStore`的例子,它通过`HttpProxy`与服务器进行通信,配置了`url`参数指向Struts2 Action,以及定义了数据模型的字段结构。 5. **优化与扩展**:...

    extjs学习资源

    - **方法介绍**: 如`Ext.get(element)`用于获取一个Element对象;`Ext.Element.addBehaviors`用于为DOM元素添加行为。 ```javascript // 示例: 为ID为"foo"下的所有a标签添加点击事件 Ext.get('foo')....

    Ext表格控件和树控件

    在这个例子中,`data` 变量定义了一个二维数组来表示表格中的数据,`store` 变量创建了一个 `SimpleStore` 来存储这些数据。`grid` 变量则创建了一个 `GridPanel`,其中包含了列的信息和数据存储器的引用。 ##### ...

    Ext与后台数据库交互

    - **Ext.DataView**:这是一个比较特殊的视图类,因为它没有预设的显示模式,而是需要开发者自行定义显示模板。`Ext.XTemplate`提供了一种简单的方式来定义模板,支持基本的模板语言。 其他数据视图类,如`...

    extjs tree 节点 链接 新窗口

    在ExtJS中,Tree是一个非常重要的组件,它用于呈现层级结构的数据。在处理Tree节点时,特别是涉及到链接和新窗口打开的情况,有一些特定的技术要点需要注意。 首先,标题“extjs tree 节点 链接 新窗口”指的是在...

    JavaScript的ExtJS框架中表格的编写教程

    ExtJS中表格的特性简介 表格由类Ext.grid.GridPanel定义,继承...一个表格的基本编写过程: 1、创建表格列模型 var cm = new Ext.grid.ColumnModel({ {header: '角色', dataIndex: 'role'}, {header: '等级', dataIn

    EXTJS___API详解

    EXTJS是一个强大的JavaScript框架,用于构建富客户端应用程序。其API详解涵盖了众多核心类和组件,使得开发者能够灵活地创建复杂的用户界面。以下是一些主要知识点的详细说明: 1. **Ext 类**:这是EXTJS的基础类,...

    GXT组件使用教程3——Column Group

    要实现Column Group,首先你需要创建一个`GroupingStore`,这个数据存储类能够处理分组数据。接着,你需要定义`Grid`或`GridView`,并在其中配置列模型。在列模型中,你可以使用`ColumnConfig`对象来指定列的属性,...

    ExtJs扩展之GroupPropertyGrid代码

    ExtJs是一个基于JavaScript的前端框架,它提供了一整套丰富的组件库,以便开发者能够创建富互联网应用(RIA)。ExtJs以丰富的组件和数据处理能力著称,特别是在复杂表格显示和管理方面,它提供了一个非常强大的控件...

    extjs核心api详解.doc

    EXTJS是一个基于JavaScript的富客户端开发框架,用于构建交互式、数据驱动的Web应用。它提供了丰富的UI组件、强大的数据管理和网络通信机制,以及优雅的API设计。 在EXTJS的核心API中,我们可以看到以下几个重要的...

    ExtJs中gridpanel分组后组名排序实例代码

    在提供的代码中,创建了一个名为`DescGroupingStore`的子类,继承自`Ext.data.GroupingStore`。这个子类主要目的是实现分组后的组名降序排列。关键在于`groupBy`方法的重写,这是设置分组和排序的入口。 ```...

    ExtJS 2.0 GridPanel基本表格简明教程

    ExtJS是一个流行的JavaScript框架,用于开发富互联网应用(RIA),它提供了一套组件模型,用于构建交互式Web应用。ExtJS中的GridPanel组件是构建表格数据网格的一个核心组件,它具有许多内置的高级功能,使得开发者...

Global site tag (gtag.js) - Google Analytics