在项目实践的过程中,遇到需要将grid中数据根据某一字段分组的要求,当然,这个功能在api中有,在此列出来以供大家查找:
两点需要注意的地方:
1、在创建store时,需要设置groupField属性的值,即为需要分组的值
for example:
Ext.define('Person', {
extend: 'Ext.data.Model',
fields: ['name', 'sex']
});
在这个数据模型中,我们需要以性别(sex)分组,那么请看下面的store
varPersonStore =Ext.create('Ext.data.Store', {
storeId: 'PersonStore',
model: 'Person',
groupField: 'sex',
data: [{
name: 'hongmei li',
sex: 'female'
},{
name: 'san zhang',
sex: 'male'
},{
name: 'Jim Green',
sex: 'male'
},{
name: 'Lily',
sex: 'female'
},{
name: 'Lucy',
sex: 'female'
}]
});
接下来,我们需要定义分组显示的tpl
vargroupingFeature=Ext.create('Ext.grid.feature.Grouping',{
groupHeaderTpl: 'sex: {name} ({rows.length} Item{[values.rows.length > 1 ? "s" : ""]})'
});//注意其中{name}即为store中sex列所对应的值
在gridPanel中,代码如下:配置features为上述定义的groupingFeature
var grid = Ext.create('Ext.grid.Panel', {
renderTo: Ext.getBody(),
store: PersonStore,
width: 600,
height: 400,
title: 'Person',
features: [groupingFeature],
columns: [{
text: 'Name',
flex: 1,
dataIndex: 'name'
},{
text: 'sex',
flex: 1,
dataIndex: 'sex'
}]
});
效果图如下:

当然实现分组后,在gridPanel中sex这一列就可以不用显示。
需要注意的是store中的数据如果在变化的时候,分组是不是也可以正常显示呢?
现在给grid增加一个itemclick事件,代码如下:
listeners:{
itemclick:function(thisview,record){
PersonStore.add([{name:"li",sex:"male"},{name:"zhang",sex:"female"}]);
}
}
效果如下图
可以看出来,界面并不是我们想要的,那么如何解决呢?(最开始愚笨的解决方案是我将此gridPanel移除并销毁掉,重新加载)我将listeners监听事件的代码做了一些变换
listeners:{
itemclick:function(thisview,record){
PersonStore.loadData([{name:"li",sex:"male"},{name:"zhang",sex:"female"}],true);
}
}
再看效果:
这个就是我们想要的效果,在动态变化store中的数据时,分组也要实现,而不是将数据追加在gridPanel的最后。对应这两段代码的区分,主要在,store添加数据的方法,前者是add(record),后者是loadData(records,[append])
起初不能理解为什么同样是store添加数据,效果却不一样,看官方文档的解释,add(),The new Model instances will be added at the end of the existing collection.(将数据追加在集合的最后)恍然大悟,loadData是按照store的规则将数据加载进来。
希望此文能给大家带来帮助!
亲自动手实践才是真理!
看到评论中的如何移除组中最旧一行,自己动手查了一下,文档实现了,在这里与大家分享:
//将前面的listeners监听事件修改如下:
注意其中first([boolean group])方法,如果不传参数,获取的是store中的第一条数据,传参为true时,返回的是store分组以组名为key,组内第一条数据为value的多个对象,PersonStore.first(true).female获取female组内的第一条数据,想获取male中的,可以使用PersonStore.first(true).male
listeners:{
itemclick:function(thisview,record){
PersonStore.loadData([{name:"li",sex:"male"},{name:"zhang",sex:"female"}],true);
alert(PersonStore.first(true).female.get('name'));
console.log(PersonStore.first(true).female);
PersonStore.remove(PersonStore.first(true).female);
// console.log(PersonStore.getAt(0));
}
}
为避免removedRecords占用内存,进行了进一步的处理,功能可以实现,但是方法有些笨,大家有好的办法可以交流交流
看代码:
listeners:{
itemclick:function(thisview,record){
PersonStore.loadData([{name:"li",sex:"male"},{name:"zhang",sex:"female"}],true);
alert(PersonStore.first(true).female.get('name'));
console.log(PersonStore.first(true));
PersonStore.remove(PersonStore.first(true).female);
varrecs =PersonStore.getRange();
console.log(recs);
//PersonStore.removeAll(true);//这句有没有都可以
PersonStore.loadRecords(recs);//重新load数据,内存中记录的removed掉的就没有了
console.log(PersonStore);
alert(PersonStore.getRemovedRecords.length);//这句alert结果为0
// console.log(PersonStore.getAt(0));
}
}
分享到:
相关推荐
### Extjs中Store分组功能的使用方法 在Extjs中,Store组件用于数据的持久化存储,管理数据的增删改查操作。而分组功能允许开发者根据特定字段对数据进行分组,从而使得数据显示更为有序。 #### 1. 分组属性设置 ...
分组功能允许我们将数据按照一个或多个字段进行分组,而小计功能则可以在每个分组底部计算特定字段的总和或其他统计信息。 1. **设置分组** 要在Grid中启用分组,你需要在store(数据存储)中配置groupField属性。...
分组功能允许将数据按照特定字段进行分类,使数据更有条理;分组合计行则是在每个分组下显示该组数据的总计,帮助用户快速了解各组的总体情况;二重表头则是为了在表格的顶部设置多个层次的列标题,以表示更复杂的...
在提供的压缩包文件"ExtChart"中,可能包含了实现上述功能的示例代码,你可以通过查看和学习这些代码来深入了解如何在ExtJS 4.2中使用柱状图。同时,官方文档也是一个宝贵的资源,提供了详细的API参考和教程,帮助...
- GridPanel支持分组,以及与分组功能结合的组件扩展。 ### 知识点详细解读 Extjs教程涵盖了从基础概念到具体组件应用的全方位内容。它强调了JavaScript面向对象编程(OOP)在Extjs框架中的应用,并通过实例演示了...
在EXTJS中,GridPanel是一种常用的组件,用于展示表格数据。在实际应用中,我们经常需要在GridPanel底部显示一行“合计”行,以便对某一列或多列的数据进行求和或其他统计操作。这篇博文“给Extjs的GridPanel增加...
在ExtJs中,GridPanel是用于展示表格数据的组件,而`grouping`功能则允许我们将数据按照特定字段进行分组,以便更好地组织和浏览数据。`gridpanel分组后组名排序`是指在对数据分组的基础上,进一步对分组的组名进行...
- **实际应用**:通过具体的例子展示如何在分页场景中使用ComboBox组件。 #### 十一、面板(Panel) - **Panel组件**:这是Extjs中最常用的容器之一,了解如何使用`Ext.Panel`类创建美观且功能丰富的窗格。 - **...
在本示例中,我们将深入探讨如何使用ExtJS实现动态加载grid,同时实现CRUD(创建、读取、更新、删除)操作和分页功能。 首先,让我们了解什么是Grid。在ExtJS中,Grid是一种数据网格组件,用于展示大量结构化数据。...
- **JavaScript 类的定义**:在 ExtJS 中,可以使用面向对象的方式定义 JavaScript 类,这有助于组织和管理代码。 - **命名空间**:命名空间用于组织代码,避免全局变量冲突。ExtJS 使用命名空间来组织其内部类和...
ExtJS表格Grid是一款强大的JavaScript组件,它在Web应用中用于展示和操作数据,尤其是在复杂的业务逻辑和大量数据处理中表现出色。这篇博客文章主要探讨了ExtJS Grid的全面功能,结合源码分析和实用工具,帮助开发者...
在本文中,我们将深入探讨ExtJS Grid的分页功能及其实现方式。 首先,ExtJS Grid是一种强大的JavaScript组件,用于在Web应用中创建数据网格。它支持各种特性,如排序、过滤、分组、分页等。分页功能特别适用于处理...
本篇复习笔记将聚焦于EXTJS Grid中的一个重要特性——内容分组,帮助你深入理解如何实现这一功能。 内容分组在EXTJS Grid中允许你将数据按照特定字段进行分类,这样可以更清晰地组织和展示数据。这在处理大量数据时...
- **配置(config)选项**: 详细解释了Extjs中配置选项的作用及使用方式。 - **Ext.apply()和Ext.applyIf()**: 这两个方法用于合并对象属性,是Extjs中常用的设计模式之一。 #### 消息框 消息框是与用户交互的重要...
总结起来,这个"ExtJS-MVC-用户列表实例"展示了如何使用ExtJS的MVC架构来构建一个功能完整的Web应用,包括定义数据模型、创建视图来展示数据、设置控制器来处理用户交互,以及利用Store进行数据管理。同时,...
- **打印支持**:使用ExtJS的Print Manager或第三方库实现报表的打印功能。 - **数据导出**:将报表数据导出为Excel、CSV或其他格式,便于进一步处理。 9. **性能优化** - **远程排序和过滤**:减轻客户端负担,...
- **Ext.data.Store类**:学习使用数据存储类来处理数据集。 - **下拉列表框**:创建并配置下拉列表框。 - **得到下拉列表框的值**:介绍如何从下拉列表框中获取选定值。 #### 第十一章:Ajax与ComboBox - **Ajax**...