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 相关文章推荐
JavaScript 全角转半角部分
Oct 28 Javascript
js中scrollHeight,scrollWidth,scrollLeft,scrolltop等差别介绍
May 16 Javascript
getAsDataURL在Firefox7.0下无法预览本地图片的解决方法
Nov 15 Javascript
jquery插件qrcode在线生成二维码
Apr 26 Javascript
javascript常用函数(2)
Nov 05 Javascript
通过BootStrap实现轮播图的实际应用
Sep 26 Javascript
网页瀑布流布局jQuery实现代码
Oct 21 Javascript
你真的了解BOM中的history对象吗
Feb 13 Javascript
jQuery实现div跟随鼠标移动
Aug 20 jQuery
浅谈Node异步编程的机制
Oct 18 Javascript
详解如何构建Promise队列实现异步函数顺序执行
Oct 23 Javascript
javascript 模块依赖管理的本质深入详解
Apr 30 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中的一个中文字符串截取函数
2007/02/14 PHP
Ecshop 后台添加新功能栏目及管理权限设置教程
2017/11/21 PHP
Packer 3.0 JS压缩及混淆工具 下载
2007/05/03 Javascript
JavaScript的Cookies
2008/01/16 Javascript
javascript 静态对象和构造函数的使用和公私问题
2010/03/02 Javascript
关于JavaScript中var声明变量作用域的推断
2010/12/16 Javascript
jquery插件 autoComboBox 下拉框
2010/12/22 Javascript
javascript如何创建表格(javascript绘制表格的二种方法)
2013/12/10 Javascript
AngularJS实现textarea记录只能输入规定数量的字符并显示
2016/04/26 Javascript
利用jquery实现下拉框的禁用与启用
2016/12/07 Javascript
vue2.0 keep-alive最佳实践
2017/07/06 Javascript
Nuxt.js实现校验访问浏览器类型的中间件
2018/08/24 Javascript
React 实现拖拽功能的示例代码
2019/01/06 Javascript
js 计算图片内点个数的示例代码
2019/04/04 Javascript
Angular6使用forRoot() 注册单一实例服务问题
2019/08/27 Javascript
Vue实现星级评价效果实例详解
2019/12/30 Javascript
在Python编程过程中用单元测试法调试代码的介绍
2015/04/02 Python
Python学习小技巧之利用字典的默认行为
2017/05/20 Python
python绘制散点图并标记序号的方法
2018/12/11 Python
Python函数的参数常见分类与用法实例详解
2019/03/30 Python
python3 实现的对象与json相互转换操作示例
2019/08/17 Python
Python collections.deque双边队列原理详解
2020/10/05 Python
python RSA加密的示例
2020/12/09 Python
英国网上香水店:Fragrance Direct
2016/07/20 全球购物
Nike英国官网:Nike.com (UK)
2017/02/13 全球购物
测绘工程专业个人自我评价
2013/12/01 职场文书
餐饮业会计岗位职责
2013/12/19 职场文书
网吧最新创业计划书范文
2014/03/27 职场文书
自强之星事迹材料
2014/05/12 职场文书
关于运动会的口号
2014/06/07 职场文书
2014乡镇党政班子四风问题思想汇报
2014/09/14 职场文书
党员民主生活会个人整改措施材料
2014/09/16 职场文书
2014年民警工作总结
2014/11/25 职场文书
2015年超市收银员工作总结
2015/04/25 职场文书
2015年秋季校长开学典礼致辞
2015/07/29 职场文书
GoFrame框架数据校验之校验结果Error接口对象
2022/06/21 Golang