[Ext JS 4] Grid 组件
来源:互联网 发布:python 时间序列处理 编辑:程序博客网 时间:2024/05/17 03:46
基本网格面板
Model and Store
Grid Panel 仅仅用来展现数据,数据的获取和保存交给使用Proxy的 Store来处理。
首先定义一个 “User”的模型
Ext.define('User', { extend: 'Ext.data.Model', fields: [ 'name', 'email', 'phone' ]});
接下来创建一个包含有几个User实例的 Store
var userStore = Ext.create('Ext.data.Store', { model: 'User', 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' } ]});这里为了方便使用内嵌的方式加载Store的数据。实际的开发中,使用Stroe的Proxy来加载数据。
网格面板
数据有了,接下来就是把数据展现在网格面板中了
Ext.create('Ext.grid.Panel', { renderTo: Ext.getBody(), store: userStore, width: 400, height: 200, title: 'Application Users', columns: [ { text: 'Name', width: 100, sortable: false, hideable: false, dataIndex: 'name' }, { text: 'Email Address', width: 150, dataIndex: 'email', hidden: true }, { text: 'Phone Number', flex: 1, dataIndex: 'phone' } ]});
渲染器
可以给栏位配置render属性来配置数据展现的样式。renderer 的功能就是把原有值修改成新的值返回。最常见的共用渲染器类似Ext.util.Format, 你也可以定义自己的renderer.
columns: [ { text: 'Birth Date', dataIndex: 'birthDate', // format the date using a renderer from the Ext.util.Format class renderer: Ext.util.Format.dateRenderer('m/d/Y') }, { text: 'Email Address', dataIndex: 'email', // format the email address using a custom renderer renderer: function(value) { return Ext.String.format('<a href="mailto:{0}">{1}</a>', value, value); } }]
分组
可以在 Store 中指定 groupField属性来给Grid Panel 分组
Ext.create('Ext.data.Store', { model: 'Employee', data: ..., groupField: 'department'});也可以在grid.Panel中通过指定Feature 的方式:
Ext.create('Ext.grid.Panel', { ... features: [{ ftype: 'grouping' }]});
选择模型
网格面板有两个主要的选择模式,一种是行选择模式,另一种是单元格选择模式。默认状况下,网格面板使用行选择模式,可以使用以下方式切换成单元格选择模式:
Ext.create('Ext.grid.Panel', { selType: 'cellmodel', store: ...});切换单元格模式后, 以下都会发生改变,一是点击一个单元格就职选择一个单元格了(在行选择模式下,是选中整行);另外是使用键盘切换是就是从一个单元格到一个单元格了,而不是一行到一行。单元格模式一般使用在编辑的状况。
编辑
主要也是两种,行编辑和单元格编辑单元格编辑
配置方式就是在网格面板的columns 配置editor,最简单的方式就是配置editor的xtype,例如:
Ext.create('Ext.grid.Panel', { ... columns: [ { text: 'Email Address', dataIndex: 'email', editor: 'textfield' } ]});
editor 也有更多的配置,比如必填值检查;
columns: [ text: 'Name', dataIndex: 'name', editor: { xtype: 'textfield', allowBlank: false }]
如果是日期栏位的编辑,可以配置成:
columns: [ { text: 'Birth Date', dataIndex: 'birthDate', editor: 'datefield' }]任何网格面板的Ext.grid.column.Columns如果没有editor配置的话是不可以编辑的。
可以使用如下方式配置。
Ext.create('Ext.grid.Panel', { ... selType: 'cellmodel', plugins: [ Ext.create('Ext.grid.plugin.CellEditing', { clicksToEdit: 1 }) ]});
行编辑
行编辑模式可以一次编辑一行所有的列
Ext.create('Ext.grid.Panel', { ... selType: 'rowmodel', plugins: [ Ext.create('Ext.grid.plugin.RowEditing', { clicksToEdit: 1 }) ]});
例子如下:
分页
网格面板支持两种分页 ,Pageing Toolbar 使用前进/后退按钮实现分页;page Scroller 使用滚动条加载新的页面。首先, 建立一个Stroe
Ext.create('Ext.data.Store', { model: 'User', autoLoad: true, pageSize: 4, proxy: { type: 'ajax', url : 'data/users.json', reader: { type: 'json', root: 'users', 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" } ]}
Pageing Toolbar
Ext.create('Ext.grid.Panel', { store: userStore, columns: ..., dockedItems: [{ xtype: 'pagingtoolbar', store: userStore, // same store GridPanel is using dock: 'bottom', displayInfo: true }]});可以通过layout 把分页工具栏放在页面的任何地方,但是常见的还是以上的方式,效果如下:
Ext.create('Ext.grid.Panel', { store: userStore, columns: ..., dockedItems: [{ xtype: 'pagingtoolbar', store: userStore, // same store GridPanel is using dock: 'bottom', displayInfo: true }]});
Pageing Scroller
作为分页工具栏的替代,也可以使用无线滚动的方式。
Ext.create('Ext.grid.Panel', { // Use a PagingGridScroller (this is interchangeable with a PagingToolbar) verticalScrollerType: 'paginggridscroller', // do not reset the scrollbar when the view refreshs invalidateScrollerOnRefresh: false, // infinite scrolling does not support selection disableSelection: true, // ...});
- [Ext JS 4] Grid 组件
- Ext JS 4的Grid组件
- EXT JS 4 grid动态隐藏列
- EXT JS Grid拓展
- ext js grid分组技巧
- Ext JS 4.2 Grid预览
- Ext Js(4.2)Grid
- js EXT : Ext.grid.GridPanel viewConfig
- [Ext JS 6 By Example 翻译] 第5章 - 表格组件(grid)
- Ext JS 6学习文档-第5章-表格组件(grid)
- [Ext JS 4] Grid 实战之分页功能
- [Ext JS 4] 实战之Grid, Tree Gird编辑Cell
- [Ext JS 4] Grid 实战之分页功能
- [Ext JS 4] Grid 实战之分页功能
- [Ext JS 4] Grid 中的单元格添加Tooltip 的效果
- 【Ext JS 4】组件查找_ComponentQuery类
- [Ext JS 4] 组件之图表
- 【Ext JS 4】组件查找_ComponentQuery类
- linux系统基础常用命令
- Axure rp工具生成chm文件导航页乱码
- 交互式选择多边形区域
- HDU 1093 A+B for Input-Output Practice (V)
- twitter storm安装和storm-start的本地运行
- [Ext JS 4] Grid 组件
- Java表达式y=a<b?c:d>a?b:c的运算解释
- hdu 4550 卡片游戏 放卡片放出最小数字 模拟好题
- jstl 格式化数字标签讲解
- 和谐
- 堆和栈的区别
- sap语言修改
- HDU 1094 A+B for Input-Output Practice (VI)
- uva 133 The Dole Queue(模拟)