提交官方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很实用的小例子。适合初学者学习。一看就明白。还有注释。
多表头插件是ExtJS Grid的一个重要特性,它允许我们创建具有多层次、复杂结构的表头,以便更好地组织和呈现数据。在ExtJS Grid中,多表头能够帮助用户更清晰地理解列的分组和关系,提高数据的可读性和分析性。 首先...
例如,在给出的部分内容中,我们可以看到一个使用`Ext.data.GroupingStore`的例子,它通过`HttpProxy`与服务器进行通信,配置了`url`参数指向Struts2 Action,以及定义了数据模型的字段结构。 5. **优化与扩展**:...
- **方法介绍**: 如`Ext.get(element)`用于获取一个Element对象;`Ext.Element.addBehaviors`用于为DOM元素添加行为。 ```javascript // 示例: 为ID为"foo"下的所有a标签添加点击事件 Ext.get('foo')....
在这个例子中,`data` 变量定义了一个二维数组来表示表格中的数据,`store` 变量创建了一个 `SimpleStore` 来存储这些数据。`grid` 变量则创建了一个 `GridPanel`,其中包含了列的信息和数据存储器的引用。 ##### ...
- **Ext.DataView**:这是一个比较特殊的视图类,因为它没有预设的显示模式,而是需要开发者自行定义显示模板。`Ext.XTemplate`提供了一种简单的方式来定义模板,支持基本的模板语言。 其他数据视图类,如`...
在ExtJS中,Tree是一个非常重要的组件,它用于呈现层级结构的数据。在处理Tree节点时,特别是涉及到链接和新窗口打开的情况,有一些特定的技术要点需要注意。 首先,标题“extjs tree 节点 链接 新窗口”指的是在...
ExtJS中表格的特性简介 表格由类Ext.grid.GridPanel定义,继承...一个表格的基本编写过程: 1、创建表格列模型 var cm = new Ext.grid.ColumnModel({ {header: '角色', dataIndex: 'role'}, {header: '等级', dataIn
EXTJS是一个强大的JavaScript框架,用于构建富客户端应用程序。其API详解涵盖了众多核心类和组件,使得开发者能够灵活地创建复杂的用户界面。以下是一些主要知识点的详细说明: 1. **Ext 类**:这是EXTJS的基础类,...
要实现Column Group,首先你需要创建一个`GroupingStore`,这个数据存储类能够处理分组数据。接着,你需要定义`Grid`或`GridView`,并在其中配置列模型。在列模型中,你可以使用`ColumnConfig`对象来指定列的属性,...
ExtJs是一个基于JavaScript的前端框架,它提供了一整套丰富的组件库,以便开发者能够创建富互联网应用(RIA)。ExtJs以丰富的组件和数据处理能力著称,特别是在复杂表格显示和管理方面,它提供了一个非常强大的控件...
EXTJS是一个基于JavaScript的富客户端开发框架,用于构建交互式、数据驱动的Web应用。它提供了丰富的UI组件、强大的数据管理和网络通信机制,以及优雅的API设计。 在EXTJS的核心API中,我们可以看到以下几个重要的...
在提供的代码中,创建了一个名为`DescGroupingStore`的子类,继承自`Ext.data.GroupingStore`。这个子类主要目的是实现分组后的组名降序排列。关键在于`groupBy`方法的重写,这是设置分组和排序的入口。 ```...
ExtJS是一个流行的JavaScript框架,用于开发富互联网应用(RIA),它提供了一套组件模型,用于构建交互式Web应用。ExtJS中的GridPanel组件是构建表格数据网格的一个核心组件,它具有许多内置的高级功能,使得开发者...