JavaScript的Ext JS框架中的GridPanel组件使用指南_extjs

1 最简单的Grid Panel
Grid Panel是ExtJS的核心部分之一,通过Grid Panel可以对数据显示、排序、分组和编辑。Model和Store是Grid Panel处理数据的核心,每个Grid Panel都必须设置Model和Store。要创建Grid Panel,首先要定义Model,Model包括了Grid Panel所有需要显示的字段,相当于数据库中表字段的集合。Store可以看作是一行数据的集合或者是Model的实例集合,每个Store都包含一个或多个Model实例,Grid Panel显示的数据都存储在Store里面。Grid Panel通过Store获取数据并显示,Store则通过Proxy对数据进行读取和保存。
下面创建一个Grid Panel用来显示用户的基本信息,包括用户名、邮箱、手机号(name、email、phone),首先创建用户模型(User Model)。

Ext.define('User', {
 extend: 'Ext.data.Model',
 fields: [ 'name', 'email', 'phone' ]
}); 

接下来创建Store,Store是User的集合,包括多个User实例。

var userStore = Ext.create('Ext.data.Store', {
 model: 'User', //刚才创建的User Model
 data: [
 { name: 'Lisa', email: 'lisa@simpsons.com', phone: '555-111-1224' },
 { name: 'Bart', email: 'bart@simpsons.com', phone: '555-222-1234' },
 { name: 'Homer', email: 'home@simpsons.com', phone: '555-222-1244' },
 { name: 'Marge', email: 'marge@simpsons.com', phone: '555-222-1254' }
 ]
}); 

Model和Store都创建好之后,就可以创建Grid Panel了。

Ext.create('Ext.grid.Panel', {
 renderTo: Ext.getBody(),
 store: userStore, //绑定上面创建的Store
 width: 400,
 height: 200,
 title: 'Application Users',
 columns: [
 {
 text: 'Name',
 width: 100,
 sortable: false,
 hideable: false,
 dataIndex: 'name' //Grid Panel中显示的字段,必须要和User Model中的字段一致
 },
 {
 text: 'Email Address',
 width: 150,
 dataIndex: 'email',
 hidden: true
 },
 {
 text: 'Phone Number',
 flex: 1,
 dataIndex: 'phone'
 }
 ]
}); 

最后创建的用户Grid Panel如图所示。

2 Grid Panel数据分组(Grouping)
只要在Store中设置groupField属性,就可以对Grid Panel显示的数据进行分组。假设公司有很多员工,需要对公司的员工在Grid Panel中按部门进行分组显示。首先在Store中设置groupField属性为department。

Ext.create('Ext.data.Store', {
 model: 'Employee',
 data: ...,
 groupField: 'department' //设置数据按照department分组
}); 

然后在Grid Panel中添加grouping Feature,实现分组显示效果。

Ext.create('Ext.grid.Panel', {
 ...
 features: [{ ftype: 'grouping' }]
});

分组显示效果如下图所示,点击这里查看官方分组显示代码。

3 Grid Panel分页显示
当数据比较多一页显示不完的时候,就需要对数据进行分页显示。Grid Panel可以通过Paging Toolbar和Paging Scroller两种方式实现分页显示显示,Paging Toolbar有上一页/下一页按钮,Paging Scroller是当Grid Panel滚动显示到底部的时候动态加载数据。
要实现分页显示,首先要设置Store支持分页,在Store中设置pageSize,pageSize默认是25。在reader中设置数据总数量totalProperty,分页插件根据pageSize和totalProperty进行分页。下面的代码pageSize设置为4,totalProperty则从返回的json数据中total属性获取。

Ext.create('Ext.data.Store', {
 model: 'User',
 autoLoad: true,
 pageSize: 4, //设置每页显示的数据数量
 proxy: {
 type: 'ajax',
 url : 'data/users.json',
 reader: {
 type: 'json',
 root: 'users', //指定从json的哪个属性获取数据,如果不指定,则从json的跟属性获取
 totalProperty: 'total' //总数据数量
 }
 }
}); 

假设json数据格式如下

{
 "success": true,
 "total": 12,
 "users": [
 { "name": "Lisa", "email": "lisa@simpsons.com", "phone": "555-111-1224" },
 { "name": "Bart", "email": "bart@simpsons.com", "phone": "555-222-1234" },
 { "name": "Homer", "email": "home@simpsons.com", "phone": "555-222-1244" },
 { "name": "Marge", "email": "marge@simpsons.com", "phone": "555-222-1254" }
 ]
} 

Store的分页已经设置完毕,下面在Grid Panel中实现Paging Toolbar分页功能。

Ext.create('Ext.grid.Panel', {
 store: userStore,
 columns: ...,
 dockedItems: [{
 xtype: 'pagingtoolbar', //在Grid Panel中添加paging toolbar
 store: userStore, //把paging toolbar的Store设置成和Grid Panel的Store一样
 dock: 'bottom',
 displayInfo: true
 }]
}); 

Paging Toolbar的分页效果如下图所示,点击这里查看官方Paging Toolbar分页功能代码。

Paging Scroller的分页实现比较简单,只要在Grid Panel中设置如下代码即可,点击这里查看官方Paging Scroller分页功能代码。

Ext.create('Ext.grid.Panel', {
 //使用Paging Scroller分页插件
 verticalScroller: 'paginggridscroller',
 // do not reset the scrollbar when the view refreshs
 invalidateScrollerOnRefresh: false,
 // infinite scrolling does not support selection
 disableSelection: true,
 // ...
}); 

4 Grid Panel添加Checkbox
只要设置Grid Panel的selModel属性为Ext.selection.CheckboxModel,点击这里查看官方代码实例。

Ext.create('Ext.grid.Panel', {
 selModel: Ext.create('Ext.selection.CheckboxModel'), //设置Grid Panel的选择模式为Checkbox
 store: userStore,
 columns: ...
}); 

5 综合示例

var grid = new Ext.grid.GridPanel({
 store //数据源
 cm //Ext.grid.columnModel
 columns //功能和Ext.grid.columnModel一样。与cm有一个就行
 autoWidth:true
 width
 title
 border:false
 columnLines: true,
 renderTo //显示div标签的id
 animCollapse:false //True 表示为面板闭合过程附有动画效果 (默认为true,在类 Ext.Fx 可用的情况下).
 collapsible: true, //true 表示面板可以闭合
 columnLines:true, //true 表示有格边框
 loadMask:true //获取数据里时有等待界面
 stripeRows: true, //双色表格
 plugins:true,
 bbar:new Ext.PagingToolbar({
 pageSize:10,
 store:store, //数据源
 displayInfo:true, //为true时下面的才显示
 displayMsg:'显示第 {0} 条到 {1} 条记录,一共 {2} 条',
 emptyMsg:'没有记录'
 }),
 tbar:[{
 text:'查询',
 icon:'/trade/images/delete.gif',
 cls:'x-btn-text-icon',
 handler:function(){win.show();}
 }
})
//**********************************************
//PagingToolbar分页
//传到服务器数据 start开始查询位置, limit要查询多少条
//排序
//服务器 sort,dir
//**********************************************
var com = new Ext.grid.ColumnModel([
 new Ext.grid.RowNumberer(),
 {header: "客户ID", width: 50, sortable: true, dataIndex: 'memid'},
 {header: "客户姓名", width: 75, sortable: true, dataIndex: 'memName'},
 {header:'姓别', width:50, dataIndex:'sex', align:'center', sortable:true, renderer:function(v){return (v == '1')?'<img src="images/user_suit.png">':'<img src="images/user_female.png">';}}
 {header: '跟踪号',width:150,dataIndex:'code'},
 {header: '日期', width:150, dataIndex: 'kd_time'}
]);

 

/***********************************************
grid tbar
样式
cls:'x-btn-text-icon' 添加
**************************************************/
EditorGridPanel
 chickToEdit:1 //点击次数
 ColumnModel 中要加editor editor:new Ext.form.TextField({
 })
//获取修改后的数据
var storeEdit = grid.getStore(); //
 var modified = storeEdit.modified.slice(0); //
 Ext.each(modified,function(m){
 alert(m.data.id);  //数据就在m.data中 id 为字段名
})
//获取grid数据
var selModel = grid.getSelectionModel(); 获取选择模式
var record;
if(!selModel.hasSelection()){
 Ext.Msg.alert('警告','请选择要修改的行!');
 return;
}
selModel.getSelections().length; //选择的行数 

record = selModel.getSelected(); //获取选择行的数据 

(1)获取数据 :
单行 

id = record.get('id');

或者 

id = record.data.id;

多行 

record[i].get('ddd')

(2)删除数据 :

var obj = grid.getSelectionModel().getSelected();
store.remove(obj);
grid.getView().refresh(); 

(3)查询 

store.baseParams['memid'] = fb.form.findField('memid').getValue();
store.baseParams['start'] = 0;
store.load();

(4)添加一行列 :
Ext自己带的一个插件 
需要文件 RowExpander.js 

var expand = new Ext.ux.grid.RowExpander({
 tpl : new Ext.Template(
 '<p>{address}</p>'
 )
});

在grid的columns中加 expand, 
并在grid属性中加 plugins: expand 

以上是小编为您精心准备的的内容,在的博客、问答、公众号、人物、课程等栏目也有的相关内容,欢迎继续使用右上角搜索按钮进行搜索javascript
, js
, ext
gridpanel
extjs gridpanel、extjs gridpanel 分页、extjs gridpanel 刷新、extjs gridpanel 清空、extjs gridpanel 编辑,以便于您获取更多的相关知识。

时间: 2024-07-30 01:00:57

JavaScript的Ext JS框架中的GridPanel组件使用指南_extjs的相关文章

Ext JS框架中日期函数的用法及日期选择控件的实现_extjs

Ext.Date是一个单例,封装了一系列日期操作函数,扩展JavaScript Date的功能,下面列出一些常用的功能. 基本函数: Ext.Date.add(date, interval, value) 给date增加或减少时间,这个函数不改变原有Date对象的值,而是返回一个新的Date对象. Ext.Date.between(date, start, end) 判断date是否在start和end之间. Ext.Date.clearTime(date, clone) 把date的时间设置成

全面解析JavaScript的Backbone.js框架中的Router路由_基础知识

Backbone 中的 Router 充当路由的作用,控制 URL 的走向,当在 URL 中使用 # 标签时生效. 定义 Router 至少需要一个 Router 和一个函数来映射特定的 URL,而且我们需要记住,在 Backbone 中,# 标签后的任意字符都会被 Router 接收并解释. 下面我们来定义一个 Router: <script> var AppRouter = Backbone.Router.extend({ routes: { "*actions": &

讲解JavaScript的Backbone.js框架的MVC结构设计理念_基础知识

什么是Backbone.js?Backbone.js是十大JS框架之首,Backbone.js 是一个重量级js  MVC 应用框架,也是js MVC框架的鼻祖.它通过Models数据模型进行键值绑定及custom事件处理,通过模型集合器Collections提供一套丰富的API用于枚举功能,通过视图Views来进行事件处理及与现有的Application通过JSON接口进行交互. 简而言之,Backbone是实现了web前端MVC模式的js库 什么是MVC?MVC:后端服务器首先(过程1)通过

JavaScript设计模式入门和框架中的实践

在编写JS和组装代码的过程中,运用一定的设计模式可以让我们的代码更加优雅.灵活. 下面笔者就结合诸如redux的subsscribe.ES6的class.vue里面的$dispatch.jquery里面的on/off来给大家简单介绍下设计模式在这些库.语法和框架中的使用. 设计模式解决的问题 设计模式并不是很玄乎的知识,很多同学在编写JS代码的时候已经在不经意间用了不少设计模式了. 笔者认为把设计模式单独抽象出来探讨,就和算法中抽象出来冒泡.排序一样,是为了描述一种常用的JS pattern.

JavaScript的Backbone.js框架入门学习指引_基础知识

1.简介最近在做一个大型网上银行项目前端的优化,需要使用一个胖客户端的优化,大概思路就是前端通过Ajax 请求去后端获取数据,以Jason的格式返回,然后显示在页面上.由于这个系统非常庞大,胖客户端方案难免需要在客户端写大量的JS代码.我想对于任何团队来说,大量的,非结构化的代码维护起来都非常的不方便.所以BackBone进入了我的视线. 它提供了一种途径可以让你结构化你的JS代码,让你以面向对象的方式来组织你的前端JS代码.这就好比我们在前端应用Domain Driven Design. 我们

一些主流JS框架中DOMReady事件的实现小结_jquery

原来比较常用的是window的onload 事件,而该事件的实际效果是:当页面解析/DOM树建立完成,并完成了诸如图片.脚本.样式表甚至是iframe中所有资源的下载后才触发的.这对于很多 实际的应用而言有点太"迟"了,比较影响用户体验.为了解决这个问题,ff中便增加了一个DOMContentLoaded方法,与onload相比,该 方法触发的时间更早,它是在页面的DOM内容加载完成后即触发,而无需等待其他资源的加载.Webkit引擎从版本525(Webkit nightly 1/20

JavaScript的Backbone.js框架环境搭建及Hellow world示例_基础知识

环境准备在正式学习Backbone之前,你需要准备一些东西: 首先,你需要获取Backbone框架源文件:http://documentcloud.github.com/backbone/ Backbone依赖于Underscore框架的基础方法,因此,你同时需要下载Underscore框架的源文件:http://documentcloud.github.com/underscore/ 在Backbone中,对DOM和事件的操作依赖于第三方库(如jQuery或Zepto),你只需要选择其中一个下

详解Backbone.js框架中的模型Model与其集合collection_基础知识

什么是 ModelBackbone 的作者是这样定义 Model 的: Model 是任何一个 web 应用的核心,它包含了交互的数据以及大部分的逻辑.例如:转化.验证.属性和访问权限等. 那么,我们首先来创建一个Model: Person = Backbone.Model.extend({ initialize: function(){ alert("Welcome to Backbone!"); } }); var person = new Person; 上述代码中,我们定义了一

Backbone.js框架中Model与Collection的使用实例_基础知识

Model关于backbone,最基础的一个东西就是model,这个东西就像是后端开发中的数据库映射那个model一样,也是数据对象的模型,并且应该是和后端的model有相同的属性(仅是需要通过前端来操作的属性). 下面就从实例来一步一步的带大家来了解backbone的model到底是什么样的一个东西. 首先定义一个html的页面: <!DOCTYPE html> <html> <head> <title>the5fire-backbone-model<