`
子衿青青
  • 浏览: 110387 次
  • 性别: Icon_minigender_1
  • 来自: 深圳
社区版块
存档分类
最新评论

Dojo 1.6 官方教程: DataGrid导引

 
阅读更多

原作者:Bryan Forbes
原文链接:http://dojotoolkit.org/documentation/tutorials/1.6/datagrid/

译者:zhuxw (zhuxw1984@gmail.com)


鉴于DataGrid对于表格数据的有效呈现,它早已成为许多应用的核心组件之一。在本教程中,我们将着眼于如何定义grid的布局结构,并讨论DataGrid所采用的滚屏机制。


难度:中等

适用Dojo版本:1.6 (其实绝大部分内容自1.2开始就支持了——译者注)


dojox.grid.DataGrid


估计我们都有过这样的经历:你的老板突然找到你,要求在你那个正在开发的应用中显示一大堆数据。作为一个Web开发人员,你知道数据呈现得越多,浏览器占用的内存就越大——但你的老板不懂这个,他只是要把这些数据弄进那个应用里。现在就是dojo的dojox.grid.DataGrid大显身手的时候了。DataGrid能够承载数千行的数据,并自如地滚屏,同时只占用相当小的内存。在本教程中,我们将学习DataGrid的基础知识。

为了提供DataGrid处理海量数据能力的直观印象,我们创建了一个显示美国职业棒球选手统计数据的grid:

【示例】


可以看到,DataGrid能够轻易地承载这份包含了17452项纪录的数据列表。在本教程中,我们将使用一份较小的数据集作为例子:只显示名人堂球员的击球统计。好了,让我们开始吧!


DataGrid的组成部分


你可能已经猜到了,DataGrid由数个不同部分组成。在最顶层,一个DataGrid由视图(View)组成。视图将DataGrid分割成好几个区域,并为每个区域单独渲染表头(header)和内容(content)。表头和内容由行(row)组成,行由子行(sub-row)组成。子行由单元格(cell)组成。让我们来看一些图,好有个直观的理解:

在后面的教程中,我们还将不断修这个示例的布局结构。要定义一个DataGrid的模样,我们需要在构造函数里给structure(结构)属性传递一些对象和数组。我们将从最小的可定义单元开始——单元格——直到最大的组成部分——视图。我们暂时不涉及如何从服务器端获取数据,但下一篇教程会涵盖这部分内容。


单元格


我们需要做的第一件事就是告诉DataGrid需要为每条数据记录显示哪些单元格(或称为“列”)。为了做到这点,我们将给structure属性传递一个“单元格定义”的数组。每一个单元格定义对象可以包含以下几个属性:
  • name:在表头部分显示的字符串
  • field:在数据记录中(用于获取数据——译者注)的字段名
  • width:表示列宽的CSS宽度字符串(需要带单位,不带单位的话默认为em——译者注)
  • hidden:一个布尔值,如果是true,那么该列将被隐藏
【示例】

DataGrid还提供了通过CSS样式和CSS类控制单元格视觉效果的方法。单元格定义中的headerStyles属性、cellStyles属性、以及styles属性都是CSS样式字符串(注意必须以分号结尾),它们分别应用于表头单元格、内容单元格,以及所有单元格。另外,headerClasses属性、cellClasses属性、以及classes属性则是以空格分隔的CSS类名,分别用于各自对应的单元格。
【示例】


子行


现在我们已经定义好了所有需要显示的数据字段,但看起来并不是很舒服。子行可以使某些数据更易阅读、更易理解。要定义子行,需要给DataGrid传一个单元格定义的数组的数组。子行允许我们在

单元格定义中使用两个新的属性:rowSpan定义了一个单元格占用多少子行,而colSpan则定义了一个单元格占用多少列。


注意:colSpan不能在第一个子行的单元格中定义,这是因为DataGrid使用了table-layout: fixed;样式来加速行的渲染。

【示例】


视图


我们已经让数据变得易读一些了,但是,一旦你将grid滚动到最右端,你就无法看到每条记录对应的球员是谁了。通过编写一个视图定义,我们能够锁定一组列,避免它们被左右滚动,从而始终保持可见。一个视图定义是一个具有如下特定属性的对象:
  • cells:一个单元格定义的数组、或这个数组的数组
  • noscroll:一个布尔值,当为true时该视图不显示滚动条(横向纵向都不显示——译者注)
  • width:设置视图宽度的CSS宽度字符串。这个宽度只有在单元格宽度采用的是相对值(例如百分比)的时候才有效
【示例】

视图定义还提供了一个很有用的属性,能够减少冗余代码:defaultCell。这个属性允许你定义默认的单元格属性,如果单元格定义中没有同名属性,那么DataGrid将自动采用这些属性:
【示例】
可见,通过在defaultCell中设置width属性,我们只需要为不同于这个默认值的列设置width属性即可。


注意:如果单元格定义里和默认设置里都没有指定,那么列的默认宽度是6em。


分页与虚拟滚动


由于历史原因,当一大堆数据需要显示时,开发者会采用一种称为“分页”的技术:任一时刻只有一小部分(大约25-50条记录)数据才会被显示。用户可以使用按钮或其他控件在“页面”之间切换。

但有了滚轮(也有人会说鼠标)之后,分页控件就显得有点笨重了。

DataGrid采用了一种略微不同的技术,称为虚拟滚动:分页浏览时,用户只需要滚动滚轮即可。这种技术被称为“虚拟滚动”是因为虽然看起来有很长的一串记录,但任一时刻却只有很小一部分数据被渲染出来。然而,DataGrid仍然使用了分页技术,当用户滚动时,数据被一页一页地从服务器(或者dojo的store数据源)请求过来。而且,默认情况下最近渲染的三页数据被原封不动地保留着,以防用户回滚到原来的地方。每页数据的行数可以由DataGrid的rowsPerPage属性控制,而需要暂时保留渲染结果的行数则由keepRows属性控制。

注意:要计算DataGrid将保留几页数据,只需要算keepRows除以rowsPerPage就行了。


结论


dojox.grid.DataGrid是一个强大的组件,它既可以渲染庞大的数据集,也能够显示由子行构成的复杂结构。而且它还让用户无需点击任何控件,单凭滚动滚轮即可浏览长列表。在下一篇教程中,我们将研究dojox.grid.DataGrid是如何与dojo的数据源data store整合的。

参考

DataGrid官方文档



分享到:
评论

相关推荐

    dojo 1.6 api

    dojo 1.6 api包含dojo、dojox、dijit等3个部分的api。

    Requirejs异步加载Dojo1.6

    本文将深入探讨如何使用Requirejs实现对Dojo 1.6版本的异步加载,并在Tomcat 6服务器环境下运行。 ### Requirejs:模块加载器 Requirejs是由James Burke创建的一个JavaScript库,它的主要功能是解决JavaScript的...

    dojo1.6关于DOM相关操作的官方介绍

    以下是对Dojo 1.6 DOM相关操作的详细说明: 1. **dojo.query**: 这是Dojo提供的一个强大选择器,类似于jQuery的`$`函数。它可以解析CSS选择器,并返回一个NodeList,这个NodeList可以进行链式操作。例如,`dojo....

    dojo1.6官网

    标题中的"dojo1.6官网"表明我们关注的是Dojo框架的1.6版本。这个版本在当时是相当成熟且广泛使用的,它包含了Dojo的核心组件、模块化系统、UI部件以及许多其他实用工具。 Dojo 1.6 的主要特点和知识点包括: 1. **...

    dojo v1.6 官方最新版同步下载.zip

    标题中的"dojo v1.6 官方最新版同步下载.zip"指的是Dojo框架的1.6版本,这是一个官方发布的更新版本,可能包含了性能优化、新特性、修复的bug以及对之前版本的改进。 Dojo 1.6 版本主要知识点包括: 1. **模块系统...

    Dojo的高级运用:Widget的制作

    <<Dojo的高级运用:Widget的制作>> 和 使用Dojo和JSON构建Ajax应用>> 中涉及到的源代码 博文链接:https://tailsherry.iteye.com/blog/102907

    dojo 官方教程 中文翻译

    这个"dojo 官方教程 中文翻译"是针对Dojo框架的全面指南,帮助中文用户更好地理解和应用Dojo。 在Dojo官方教程中,你可以学习到以下核心知识点: 1. **Dojo基础**:了解Dojo的核心概念,如dojo/_base模块,这是...

    DOJO开发指南(结合DOJO中国及网上的资料整理的结果)

    【DOJO开发指南】 DOJO 是一个开源的JavaScript工具库,设计用于简化Web应用程序的开发,特别是富互联网应用(RIA)。它由多个组件组成,包括基础的JavaScript代码库、组件库、工具集以及一系列用于处理不同任务的...

    dojo精品中文教程(全)

    dojo精品中文教程 Dojo.1.0 Practice Note [1] 什么是dojo 选择dojo的理由 AJAX架构之Dojo篇 Adding Ajax中文版 (DoJo) DOJO学习笔记(七)-日期控件DropdownDatePicker和DatePicker DOJO常用的验证函数 ...

    Dojo 1.10版离线参考手册

    Dojo 是一个强大的JavaScript工具包,它为Web开发提供了丰富的功能和组件,涵盖了从DOM操作到数据管理,从动画效果到AJAX通信等各个方面。在Dojo 1.10版离线参考手册中,我们可以深入了解到这个版本的详细信息和使用...

    Dojo官方教程中文翻译完美版

    这个"Dojo官方教程中文翻译完美版"为开发者提供了全面了解和掌握Dojo工具集的宝贵资源。 在Dojo框架中,有几个核心概念和关键组件是学习的重点: 1. **模块系统(AMD,Asynchronous Module Definition)**:Dojo是...

    dojo的datagrid使用

    在本文中,我们将深入探讨Dojo的DataGrid组件的使用,包括如何配置、展示数据以及实现分页功能。Dojo是流行的JavaScript库,提供了一系列强大的UI组件,DataGrid就是其中之一,用于显示和操作表格数据。 1. **Dojo ...

    dojo相关详细资料

    `.mht` 文件是一种单一文件的网页归档格式,可能包含了一个完整的Dojo教程或示例,包括HTML、CSS和JavaScript代码。通过查看这个文件,你可以得到一个实际应用Dojo的示例,加深对Dojo用法的理解。 总结来说,Dojo ...

    dojo-release-1.6.1-src.zip

    2. **AMD 模块系统**: AMD是Dojo 1.6引入的重要特性,它允许异步加载JavaScript模块,解决了大型应用中因脚本顺序依赖导致的性能问题。require.js是基于AMD实现的一个知名库,而Dojo 1.6是最早采用这一模式的库之一...

    dojo教程 dojo 教程大全

    精通Dojo(中文版),之前自己学习的时候看的,质量挺高,百度网盘地址

    Dojo框架使用教程

    本教程将深入探讨Dojo框架的使用,帮助开发者更好地理解和应用这一工具。 首先,从`dojo-release-0.9.0.tar.gz`这个文件名可以看出,这是一个Dojo框架的早期版本,版本号为0.9.0。在学习过程中,了解不同版本间的...

    dojo权威入门教程

    《dojo权威入门教程》是一本专注于JavaScript库Dojo Toolkit的学习指南,主要面向Java开发者或对Web前端技术感兴趣的人员。Dojo Toolkit是一个强大的JavaScript框架,它提供了丰富的组件、工具和API,帮助开发者高效...

    dojo api最好资料

    ### Dojo API中文参考手册详解 #### Dojo体系架构概览 Dojo作为一个全面的JavaScript框架,被设计成模块化且可扩展的方式。其体系架构采用分层设计,旨在简化前端开发并提升用户体验。 ##### 包系统 Dojo的基础...

Global site tag (gtag.js) - Google Analytics