Ext JS 4的Grid组件

Summary: 介绍Ext JS 4的Grid Ext JS 4 Grid Components
Author: Brian Moeskau(译者:Frank Cheung)
Published: 2011三月七日
Ext Version: 4.x

该文英文版本:http://www.sencha.com/blog/ext-js-4-grid-components

我们正在不懈地努力着Ext JS4。到目前为止所呈送给各位看官的只是程序员预览版本(Developer Perview),不过我们打算在未来四到六个星期之内,就会发布ExtJS 4的最终版本。近期发布一次的程序员版本中附送了最新的Ext JS 4 Grid组件。为着真正发挥Ext JS 4底层能力,我们对Grid组件完全重写,可以说比较起3.x版本将会有显著的改善。4.0在性能和灵活性这两方面尤其得到改善,其中改善灵活性的好处,便是添加Grid的新功能更加容易了。下面就请跟着我们和文字,一起罗列罗列下Grid有哪些最新、最重要的功能。

旧Ext JS 3 Grid工作起来还是蛮不错的。但通过“最小公分母(least common denominator)”的方法论来确定其各种功能的话,很容易带来一点不足的就是,伴随着Grid的每一项功能,都会生成大量的HTML Markup产生。我们不得不面对这个问题。于是在ExtJS 4中,规定Grid的每一项功能,只会根据开发人员设定与否,才会渲染出与之对应功能的Markup在页面上。Grid默认启动时只有为数不多的Markup而已。这样设计API的结果,便是在渲染页面以及Grid整体效能这双方面均得到极大的提升。

标准化布局Standardized Layout

渲染流水线得到了改善,Grid的其他方面亦齐头迈进,不甘人后。许多Grid的部分都被规划成为单独、清晰的Component组件,整合到标准的布局管理系统中,并非旧版中直接处理内部Markup、CSS的那种方式。这使得API可以联合框架的其他强大的特性,进而来统一Grid的渲染流程。而这些过程,仍维持在精确到象素级别水准(pixel-perfect)的UI体验。

数据视图DataView

新的GridView继承自标准DatView视图。这不仅能够减掉内部冗余代码,而且使得新Grid更轻松地去自定义。继承自DataView所体现的好处,首先便是可以直接借助选区模型(Selection Model)来作为任意的试图,包括那些用键盘选定的非相邻的选区。

扩展新功能 Feature Support

在Ext JS 3里面为Grid加入新功能,一般API接口方面有良好的考虑。但现在来看,却没有一种清晰的流程方法去指导,显得比较乱。有时通过写插件(Plugins),有时就写子类。总之扩展Grid的话可能会比较复杂。

要解决上述问题,实质就是提供一种彻底灵活的选项操作。ExtJS 4将引入全新的一个Grid基类,称作Ext.grid.Feature。通过继承这个Feature类,对任何Grid其所在模板(Template)进行修改,就可以控制当前Grid视图生成的Markup结果。Features类跟旧版的GridView相似,但能力更强,也更为有用。之所以有用和强大,是在于其对延续Grid功能这点上表现得更为简单和适配。Grid里头的一些功能如RowWrap、RowBody和Grouping都是Fetures之子类。

虚拟滚动 Virtual Scrolling

Ext 4 Grid已经可以做到原生支持“按需加载(load-on-demand)”的数据视图了。虽然这是个虚拟视图,但是的确可以能够做到数据的缓冲。无论上百条抑或达上千笔的数据,都可以保证在Grid轻松显示。无疑,这将大大扩充了Grid数据处理能力。

编辑单元格控件 Editing Improvements

我们依然拿旧版对比一下。Ext 3里面要编辑Grid单元格,就必须制定EditorGrid类。通过继承方式可能不太灵活。于是 Ext 4就否决了继承的方式,而是采用“插件化”的方式。通过Ext JS4的Editing插件可以自由绑定到任意的Grid的实例,对于全体任何类型的Grid均可使用。于是乎,此举又为提高“灵活性(flexibility)”添泼了一抹浓彩。此外,对于Ext 3中很受大家所欢迎的一款扩展:RowEditor,在这次发布,我们也将RowEditor正式加入的Ext 4包中,成为标准类库的一员。

例子

下面的例子是演示的Ext JS的Grid分组功能的。要逐一显示所有功能,于一例子中的话尚难为之。不过阁下想尝鲜一下Grid的新容貌,下面这个例子就不容错过耶!如阁下所见,配置项什么的都跟Ext 3差别不大。可是那个分组功能,看到没有?不需要写GroupingView了,只是在配置项声明一下就可以了,更简单了。这是体现Ext 4 灵活性的一个地方,还有其他地方呈现Ext 4的新元素,新优点。就好像,普通的Store也可以支持分组了,并入到标准store功能中,用不着继承什么GroupingStore。

Ext.onReady(function() {
Ext.regModel('Teams', {
fields: ['name', 'sport']
});

var teamStore = new Ext.data.Store({
model: 'Teams',
sorters: ['sport','name'],
groupField: 'sport',
data: [
{ name: 'Aaron', sport: 'Table Tennis' },
{ name: 'Aaron', sport: 'Football' },
{ name: 'Abe', sport: 'Basketball' },
{ name: 'Tommy', sport: 'Football' },
{ name: 'Tommy', sport: 'Basketball' },
{ name: 'Jamie', sport: 'Table Tennis' },
{ name: 'Brian', sport: 'Basketball' },
{ name: 'Brian', sport: 'Table Tennis' }
]
});

var grid = new Ext.grid.GridPanel({
renderTo: Ext.getBody(),
store: teamStore,
width: 400,
height: 300,
title: 'Sports Teams',
items: [{
features: [{
ftype: 'grouping'
}],
headers: [{
text: 'Name',
flex: 1,
dataIndex: 'name'
},{
text: 'Sport',
dataIndex: 'sport'
}]
}]
});
});

时间: 2024-10-22 02:48:38

Ext JS 4的Grid组件的相关文章

Ext JS 3.3 日历组件

在Ext中设计一个标准的日历组件并不是一件简单的事情.既不能把它设计复 杂到用起来比较困难,又不能设计得简单到只能拿来当例子,脱离了实际的用途. 我们在这两者这间作了平衡,希望你们同意. 开始了解日历面板 主要组成部分: *月视图这个视图渲染使用了MonthViewTemplate.它会自动适应屏幕尺寸,不 会出现滚动条.它基于box布局. *日视图这个视图使用了两个组件:DayHeaderView(由DayHeaderTemplate渲 染)和DayBodyView(由DayBodyTempl

ext js 4.0 grid表格根据列值的不同给行设置不同的背景颜色

Code: Ext.create('Ext.grid.Panel', { ... viewConfig: { getRowClass: function(record) { return record.get('age') < 18 ? 'child-row' : 'adult-row'; } } }); Code css样式: .child-row .x-grid-cell { background-color: #ffe2e2; color: #900; } .adult-row .x-gr

《Ext JS实战》——1.3 框架概览

1.3 框架概览 Ext JS作为一个框架,不仅提供了UI部件,还提供了许多其他特性.这些内容可以分成6大部分,即Ext JS核心.UI组件.Web远程调用.数据服务.拖放以及通用工具.图1-4说明了这6个部分. 图1-4 Ext JS的6大部分,即Ext JS核心.UI组件.Web远程调用.数据服务.拖放及通用工具 了解这6大部分之间的区别以及各自的用途,有助于开发应用程序时划分边界,因此下面先讨论这6个部分. Ext JS核心 第一个功能集就是Ext JS核心,这一部分包括了许多基本功能,包

Ext JS 5 对平板的支持 【已翻译100%】

Ext JS 已经被公认为桌面web应用的领衔框架. 计算机应用市场,无论是在个人还是企业领域,都因为平板开始挑战全球个人PC的销售量而变得云诡波谲起来. Sencha 认识到了这种变化,并在其 Ext JS 5 中退出了新的特性和功能优化. Ext JS 5 从 Sencha Touch 2 那里学到了一堆的新花样. 多年在最佳移动web应用框架领域的经验集于一身,使得其在台式机上面的产品也能在现在平板上得到完美的呈现. 我们可以从整个全线的更新中看到这些更新 - 类系统,事件管理,小窗口,还

Ext JS添加子组件的误区探讨

经常会有人问我,为什么我的Grid不能岁窗口的变得而自动调整.了解后,发现很多人都习惯在渲染子组件的时候将Gird渲染到容器内的一个div里,而这正是问题的所在. 在Ext JS的布局系统中,能控制到的是容器的子组件,而对于渲染到容器中一个DIV的Grid,它并不知道在这容器里添加了一个Grid,当调整大小的时候,也就无法去调整Grid的大小了,而这也就是为什么Grid不会随容器的改变而改变了. 为什么那么多人喜欢使用这种方式来添加子组件呢?我想原因主要有以下两点: 1.不知道如何在容器内添加子

《Ext JS 4 First Look》翻译之五:Grid、Tree和Form   

5.1. Grid panel      Grid应该是我们在开发时使用的最多的组件之一.Extjs4对其进行了重大的改进.      Extjs4与Extjs3的Grid生成不同的HTML.Sencha称其为智能渲染(Intelligent Rendering).Extjs3中即使不需要Grid的所有特性,它也会生成整套HTML.而Extjs4就只会渲染Grid所用到的特性,这样就使 渲染最小化且提高了性能.      在学习Extjs4中Grid的新特性前,让我们先了解在Extjs4中如何创

《Ext JS 4 First Look》翻译之五:Grid、Tree和Form

<Ext JS 4 First Look>翻译之五:Grid.Tree和Form      至此我们已经学习了Data包和布局等API.下面我们来学习作为Extjs框架中我们用得最多的用来展现数据的Grid.Tree和Form吧! 目录: 5.1. Grid panel 5.1.1. Columns 5.1.2. Feature 5.1.2.1. Ext.grid.feature.Grouping 5.1.2.2. Ext.grid.feature.Summary 5.1.2.3. Ext.g

Ext JS添加子组件的误区探讨_extjs

经常会有人问我,为什么我的Grid不能岁窗口的变得而自动调整.了解后,发现很多人都习惯在渲染子组件的时候将Gird渲染到容器内的一个div里,而这正是问题的所在. 在Ext JS的布局系统中,能控制到的是容器的子组件,而对于渲染到容器中一个DIV的Grid,它并不知道在这容器里添加了一个Grid,当调整大小的时候,也就无法去调整Grid的大小了,而这也就是为什么Grid不会随容器的改变而改变了. 为什么那么多人喜欢使用这种方式来添加子组件呢?我想原因主要有以下两点: 1.不知道如何在容器内添加子

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

1 最简单的Grid PanelGrid Panel是ExtJS的核心部分之一,通过Grid Panel可以对数据显示.排序.分组和编辑.Model和Store是Grid Panel处理数据的核心,每个Grid Panel都必须设置Model和Store.要创建Grid Panel,首先要定义Model,Model包括了Grid Panel所有需要显示的字段,相当于数据库中表字段的集合.Store可以看作是一行数据的集合或者是Model的实例集合,每个Store都包含一个或多个Model实例,G