ExtJS 2.0 GridPanel基本表格简明教程


Posted in Javascript onMay 25, 2010

ExtJS中的表格功能非常强大,包括了排序、缓存、拖动、隐藏某一列、自动显示行号、列汇总、单元格编辑等实用功能。
表格由类Ext.grid.GridPanel定义,继承自Panel,其xtype为grid。ExtJS中,表格Grid必须包含列定义信息,并指定表格的数据存储器Store。表格的列信息由类Ext.grid.ColumnModel定义、而表格的数据存储器由Ext.data.Store定义,数据存储器根据解析的数据不同分为JsonStore、SimpleStroe、GroupingStore等。
我们首先来看最简单的使用表格的代码:

Ext.onReady(function(){ 
var data=[ [1, 'EasyJWeb', 'EasyJF','www.baidu.com'], 
[2, 'jfox', 'huihoo','3water.com'], 
[3, 'jdon', 'jdon','s.3water.com'], 
[4, 'springside', 'springside','tools.3water.com'] ]; 
var store=new Ext.data.SimpleStore({data:data,fields:["id","name","organization","homepage"]}); 
var grid = new Ext.grid.GridPanel({ 
renderTo:"hello", 
title:"中国Java开源产品及团队", 
height:150, 
width:600, 
columns:[{header:"项目名称",dataIndex:"name"}, 
{header:"开发团队",dataIndex:"organization"}, 
{header:"网址",dataIndex:"homepage"}], 
store:store, 
autoExpandColumn:2 
}); 
});

执行上面的代码,可以得到一个简单的表格,如下图所示:
ExtJS 2.0 GridPanel基本表格简明教程
上面的代码中,第一行“var data=…”用来定义表格中要显示的数据,这是一个[][]二维数组;第二行“var store=…”用来创建一个数据存储,这是GridPanel需要使用配置属性,数据存储器Store负责把各种各样的数据(如二维数组、JSon对象数组、xml文本)等转换成ExtJS的数据记录集Record,关于数据存储器Store我们将在下一章中作专门介绍。第三行“var grid = new Ext.grid.GridPanel(…)”负责创建一个表格,表格包含的列由columns配置属性来描述,columns是一数组,每一行数据元素描述表格的一列信息,表格的列信息包含列头显示文本(header)、列对应的记录集字段(dataIndex)、列是否可排序(sorable)、列的渲染函数(renderer)、宽度(width)、格式化信息(format)等,在上面的列子中只用到了header及dataIndex。
下面我们看简单看看表格的排序及隐藏列特性,简单修改一下上面的代码,内容如下:
Ext.onReady(function(){ 
var data=[ [1, 'EasyJWeb', 'EasyJF','www.baidu.com'], 
[2, 'jfox', 'huihoo','3water.com'], 
[3, 'jdon', 'jdon','s.3water.com'], 
[4, 'springside', 'springside','tools.3water.com'] ]; 
var store=new Ext.data.SimpleStore({data:data,fields:["id","name","organization","homepage"]}); 
var colM=new Ext.grid.ColumnModel([{header:"项目名称",dataIndex:"name",sortable:true}, 
{header:"开发团队",dataIndex:"organization",sortable:true}, 
{header:"网址",dataIndex:"homepage"}]); 
var grid = new Ext.grid.GridPanel({ 
renderTo:"hello", 
title:"中国Java开源产品及团队", 
height:200, 
width:600, 
cm:colM, 
store:store, 
autoExpandColumn:2 
}); 
});

直接使用new Ext.grid.ColumnModel来创建表格的列信定义信息,在“项目名称“及“开发团队”列中我们添加了sortable为true的属性,表示该列可以排序,执行上面的代码,我们可以得到一个支持按“项目名称“或“开发团队”的表格,如图xxx所示。
ExtJS 2.0 GridPanel基本表格简明教程
(按项目名称排序)
ExtJS 2.0 GridPanel基本表格简明教程
(可排序的列表头后面小按钮可以弹出操作菜单)
ExtJS 2.0 GridPanel基本表格简明教程
(可以指定隐藏哪些列)
另外,每一列的数据渲染方式还可以自己定义,比如上面的表格中,我们希望用户在表格中点击网址则直接打开这些开源团队的网站,也就是需要给网址这一列添加上超级连接。下面的代码实现这个功能:
function showUrl(value) 
{ 
return ""+value+""; 
} 
Ext.onReady(function(){ 
var data=[ [1, 'EasyJWeb', 'EasyJF','www.baidu.com'], 
[2, 'jfox', 'huihoo','3water.com'], 
[3, 'jdon', 'jdon','s.3water.com'], 
[4, 'springside', 'springside','tools.3water.com'] ]; 
var store=new Ext.data.SimpleStore({data:data,fields:["id","name","organization","homepage"]}); 
var colM=new Ext.grid.ColumnModel([{header:"项目名称",dataIndex:"name",sortable:true}, 
{header:"开发团队",dataIndex:"organization",sortable:true}, 
{header:"网址",dataIndex:"homepage",renderer:showUrl}]); 
var grid = new Ext.grid.GridPanel({ 
renderTo:"hello", 
title:"中国Java开源产品及团队", 
height:200, 
width:600, 
cm:colM, 
store:store, 
autoExpandColumn:2 
}); 
}); 
[html] 上面的代码跟前面的示例差别不大,只是在定义“网址”列的时候多了一个renderer属性,即{header:"网址",dataIndex:"homepage",renderer:showUrl}。showUrl是一个自定义的函数,内容就是根据传入的value参数返回一个包含<a>标签的html片段。运行上面的代码显示结果如下图所示: 

自定义的列渲染函数可以实现在单元格中显示自己所需要的各种信息,只是的浏览器能处理的html都可以。 
除了二级数组以外,表格还能显示其它格式的数据吗?答案是肯定的,下面假如我们的表格数据data定义成了下面的形式: 
[code] 
var data=[{id:1, 
name:'EasyJWeb', 
organization:'EasyJF', 
homepage:'www.baidu.com'}, 
{id:2, 
name:'jfox', 
organization:'huihoo', 
homepage:'3water.com'}, 
{id:3, 
name:'jdon', 
organization:'jdon', 
homepage:'s.3water.com'}, 
{id:4, 
name:'springside', 
organization: 'springside', 
homepage:'tools.3water.com'} 
];

也就是说数据变成了一维数组,数组中的每一个元素是一个对象,这些对象包含name、organization、homepage、id等属性。要让表格显示上面的数据,其实非常简单,只需要把store改成用Ext.data.JsonStore即可,代码如下:
var store=new Ext.data.JsonStore({data:data,fields:["id","name","organization","homepage"]}); 
var colM=new Ext.grid.ColumnModel([{header:"项目名称",dataIndex:"name",sortable:true}, 
{header:"开发团队",dataIndex:"organization",sortable:true}, 
{header:"网址",dataIndex:"homepage",renderer:showUrl}]); 
var grid = new Ext.grid.GridPanel({ 
renderTo:"hello", 
title:"中国Java开源产品及团队", 
height:200, 
width:600, 
cm:colM, 
store:store, 
autoExpandColumn:2 
});

上面的代码得到的结果与前面的一样。当然,表格同样能显示xml格式的数据,假如上面的数据存放成hello.xml文件中,内容如下:
<?xml version="1.0" encoding="UTF-8"?><dataset> <row> <id>1</id> <name>EasyJWeb</name> <organization>EasyJF</organization> <homepage>www.baidu.com</homepage> </row> <row> <id>2</id> <name>jfox</name> <organization>huihoo</organization> <homepage>3water.com</homepage> </row> <row> <id>3</id> <name>jdon</name> <organization>jdon</organization> <homepage>s.3water.com</homepage> </row> <row> <id>4</id> <name>springside</name> <organization>springside</organization> <homepage>tools.3water.com</homepage> </row> </dataset>

为了把这个xml数据用ExtJS的表格Grid进行显示,我们只需要把store部分的内容调整成如下的内容即可:

var store=new Ext.data.Store({ 
url:"hello.xml", 
reader:new Ext.data.XmlReader({ 
record:"row"}, 
["id","name","organization","homepage"]) 
});

其它的部分不用改变,完整的代码如下:

function showUrl(value) 
{ 
return "<a href='http://"+value+"' target='_blank'>"+value+"</a>"; 
} 
Ext.onReady(function(){ 
var store=new Ext.data.Store({ 
url:"hello.xml", 
reader:new Ext.data.XmlReader({ 
record:"row"}, 
["id","name","organization","homepage"]) 
}); 
var colM=new Ext.grid.ColumnModel([{header:"项目名称",dataIndex:"name",sortable:true}, 
{header:"开发团队",dataIndex:"organization",sortable:true}, 
{header:"网址",dataIndex:"homepage",renderer:showUrl}]); 
var grid = new Ext.grid.GridPanel({ 
renderTo:"hello", 
title:"中国Java开源产品及团队", 
height:200, 
width:600, 
cm:colM, 
store:store, 
autoExpandColumn:2 
}); 
store.load(); 
});

store.laod()是用来加载数据,执行上面的代码产生的表格与前面的完全一样。

Javascript 相关文章推荐
jQuery获取样式中的背景颜色属性值/颜色值
Dec 17 Javascript
使用jquery中height()方法获取各种高度大全
Apr 02 Javascript
jQuery如何取id有.的值一般的方法是取不到的
Apr 18 Javascript
jQuery三级下拉列表导航菜单代码分享
Apr 15 Javascript
Jquery ui datepicker设置日期范围,如只能隔3天【实现代码】
May 04 Javascript
javascript使用btoa和atob来进行Base64转码和解码
Mar 20 Javascript
Angular.js实现动态加载组件详解
May 28 Javascript
React Native使用fetch实现图片上传的示例代码
Mar 07 Javascript
AngularJS使用$http配置对象方式与服务端交互方法
Aug 13 Javascript
Angularjs 根据一个select的值去设置另一个select的值方法
Aug 13 Javascript
vue-cli3项目升级到vue-cli4 的方法总结
Mar 19 Javascript
36个正则表达式(开发效率提高80%)
Nov 17 Javascript
Chrome中模态对话框showModalDialog返回值问题的解决方法
May 25 #Javascript
json格式化/压缩工具 Chrome插件扩展版
May 25 #Javascript
js 多种变量定义(对象直接量,数组直接量和函数直接量)
May 24 #Javascript
js 设置选中行的样式的实现代码
May 24 #Javascript
基于jquery的direction图片渐变动画效果
May 24 #Javascript
jQuery 顺便学习下CSS选择器 奇偶匹配nth-child(even)
May 24 #Javascript
jquery 模拟类搜索框自动完成搜索提示功能(改进)
May 24 #Javascript
You might like
PHP中的超全局变量
2006/10/09 PHP
php在页面中调用fckeditor编辑器的方法
2011/06/10 PHP
PHP实现的带超时功能get_headers函数
2015/02/10 PHP
php实现头像上传预览功能
2017/04/27 PHP
php readfile下载大文件失败的解决方法
2017/05/22 PHP
深入浅析安装PhpStorm并激活的步骤详解
2020/09/17 PHP
使两个iframe的高度与内容自适应,且相等
2006/11/20 Javascript
Javascript实现DIV滚动自动滚动到底部的代码
2012/03/01 Javascript
找出字符串中出现次数最多的字母和出现次数精简版
2012/11/07 Javascript
JavaScript中的匀速运动和变速(缓冲)运动详细介绍
2012/11/11 Javascript
js获取单选框或复选框值及操作
2012/12/18 Javascript
JS定时刷新页面及跳转页面的方法
2013/07/04 Javascript
jquery实现当滑动到一定位置时固定效果
2014/06/17 Javascript
js取得html iframe中的元素和变量值
2014/06/30 Javascript
javascript实现数独解法
2015/03/14 Javascript
图文详解JavaScript的原型对象及原型链
2016/08/02 Javascript
node.js express安装及示例网站搭建方法(分享)
2016/08/22 Javascript
JavaScript学习笔记整理_简单实现枚举类型,扑克牌应用
2016/09/19 Javascript
URL的参数中有加号传值变为空格的问题(URL特殊字符)
2016/11/04 Javascript
微信小程序自定义导航隐藏和显示功能
2017/06/13 Javascript
jQuery实现的鼠标拖动浮层功能示例【拖动div等任何标签】
2018/12/29 jQuery
jQuery实现点击滚动到指定元素上的方法分析
2020/03/19 jQuery
Python ORM框架SQLAlchemy学习笔记之关系映射实例
2014/06/10 Python
Python中列表(list)操作方法汇总
2014/08/18 Python
Python lxml模块安装教程
2015/06/02 Python
Python基础学习之类与实例基本用法与注意事项详解
2019/06/17 Python
python构造函数init实例方法解析
2020/01/19 Python
django从后台返回html代码的实例
2020/03/11 Python
pandas使用之宽表变窄表的实现
2020/04/12 Python
python使用re模块爬取豆瓣Top250电影
2020/10/20 Python
医药营销专业个人自荐信
2013/09/29 职场文书
项目专员岗位职责
2013/12/04 职场文书
咖啡店创业计划书
2014/08/15 职场文书
2015年新教师个人工作总结
2015/10/14 职场文书
CSS3点击按钮圆形进度打钩效果的实现代码
2021/03/30 HTML / CSS
Win10 最新稳定版本 21H2开始推送
2022/04/19 数码科技