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

Dojo1.6官方教程:连接DataGrid和Store

 
阅读更多

原作者:Kris Zyp
原文链接:http://dojotoolkit.org/documentation/tutorials/1.6/store_driven_grid/
译者:zhuxw(zhuxw1984@gmail.com)


鉴于DataGrid对于表格数据的有效呈现,它早已成为许多应用的核心组件之一。在本教程中,我们将着眼于如何为grid连上store(Dojo的客户端数据集——译者注),以进行快捷高效的数据读取和更新。

难度:初等
Dojo版本:1.6

DataGrid和Store

首先,我们将创建一个store。在本例中将创建一个JsonRest store,它将通过JSON REST HTTP成为连接grid和我们的服务器的纽带。创建代码如下:

以上代码表明这个store将向给定的URL("MyData/")发送请求,以获取或修改数据。

注意:其他类型的store也能使用,例如dojo/store/Memory(原文有误,并不存在dojo/data/Memory。 ——译者注),也能够驱动DataGrid。然而本教程只采用 JsonRest store。


现在我们可以创建DataGrid了。在1.6版中DataGrid仍然基于dojo.data API,因此我们将使用接口适配器dojo.data.ObjectStore来连接DataGrid和我们刚刚创建的store。DataGrid采用标准的Dojo小部件的构造方式,因此我们可以用我们的store作为参数来实例化一个DataGrid(同时请确保已经导入了正确的CSS文件(例如使用claro主题的话,可导入dojox/grid/resources/claroGrid.css。——译者注))
现在我们已经创建好了grid,当它启动完成后(即调用grid.startup()后——译者注),将调用store的query()方法,从而触发一个请求来获取数据。服务器需要返回一个包含数据的JSON数组作为响应,这样,grid就会将这些数据渲染出来。这个JSON数组形式的响应看上去就像这样:

【示例】

好了,现在我们已经有了一个可以正常工作的grid,它能从我们的服务器获取数据。接下来我们来看一下如何增强我们这个组件。

分页

通过响应滚动鼠标滚轮事件来实现即时分页是Dojo DataGrid的强大功能之一。它为浏览大数据集提供了无缝、直观的用户体验——无需点击任何分页控件,只需简单地滚动滚轮即可看到更多数据。这种即时分页是通过向store不断发送一种特殊的请求实现的,这种请求限制了每次返回的数据行数。grid将给store的query()方法传一个请求对象作为其第二个参数,这个对象中有两个属性:start和count。JsonRest store通过HTTP头部属性Range将这两个参数发送到服务器端。这是一个对于可伸缩性非常重要的特性,因为这使得我们能够延迟加载在可视范围之外的行,而不是一下子加载所有数据。向服务器发出的第一个请求如下所示(你可以在浏览器的调试工具中方便地查看这些请求):
http服务器可以通过Range头来确定需要向客户端发送多少行数据(例如,可以把这个Range头转化为MySQL服务器的LIMIT或OFFSET参数)。对于大规模的数据集,当你将grid向下滚动时,将触发后续的请求。这些后续请求也都具有Range参数,只不过偏移量(起始行号)不同罢了。grid并不直接向服务器发送请求,而是调用store的函数(这些都是自动完成的):

排序

DataGrid还支持在点击列头时触发对数据排序的请求。出于性能考虑,grid将实际的排序工作交给了store去做,因为在数据库中进行排序的效率是最高的。当点击一列时,grid将向store发送一个带有sort参数的新请求,这个参数通过query()方法的第二个形参(是一个参数对象)传入。对于JsonRest store来说,这将告诉服务器,返回的数据需要按照某个属性排序(在本例中是“name”属性):
grid内部通过下面的逻辑向store发出排序请求:

grid这种与store的交互方式有一个很重要的特性,那就是这种请求数据的方式使得store的数据视图保持独立。这意味着如果我们在grid外直接向store请求数据,对于grid的显示是没有任何影响的。换句话说,grid对于store的请求只限于其自身,与其他请求是相互独立的。你无法直接对store排序,你只能获取一个排好序的数据视图,这个数据视图就是当你点击列头时grid显示的内容。


过滤

除了排序视图外,我们还可以创建过滤视图。这可以通过setQuery()方法做到。DataGrid将把这些参数传给store(和排序与分页一样,过滤数据也最好在数据库层面完成,这样的效率最高)。例如,过滤出所有缩写为“NY”的行,只需要这样写:
这句话将触发一个如下请求:
这个请求也将被转化为合适的数据库查询。

在Grid内部,传给setQuery方法的这个请求是作为store.query()方法的第一个参数。如果使用的是JsonRest store,这个请求最终会转化为字符串,接在URL后面以http GET方法的形式发送到服务器端。


编辑Grid

DataGrid支持双击后(或单击后)直接编辑单元格,可以提供很好的用户体验。DataGrid通过统一的数据接口将改动写回store。一旦编辑了一个单元格,改变后的数据通过Dojo数据适配器的setValue方法写回,在未保存之前暂时留在适配器中,直到调用了save()方法:
调用save()方法后,所有未保存的改动都会通过put()方法保存到store中。


注意:DataGrid经常需要通过ID获取对象。为了避免向服务器发送多余的请求,还可以为store加上一层Cache缓存,从而在本地快速存取缓存的对象:

结论

DataGrid是一个功能强大、丰富的表格控件,提供伸缩式的表格数据渲染,还包括排序、过滤、列移动、选择、编辑、键盘导航等等。DataGrid与store的紧密联系使得在Grid中对数据处理进行配置非常容易。



分享到:
评论

相关推荐

    dojo 1.6 api

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

    Requirejs异步加载Dojo1.6

    Requirejs和Dojo是JavaScript库和模块管理工具,它们在Web开发中扮演着重要的角色。本文将深入探讨如何使用Requirejs实现对Dojo 1.6版本的异步加载,并在Tomcat 6服务器环境下运行。 ### Requirejs:模块加载器 ...

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

    Dojo 是一个强大的JavaScript工具库,它为Web开发提供了丰富的功能和API,包括对DOM(文档对象模型)的操作。在Dojo 1.6版本中,DOM操作是其核心特性之一,它允许开发者高效地创建、修改和管理HTML元素。以下是对...

    dojo1.6官网

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

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

    10. **文档和社区**:Dojo 1.6版本发布的同时,官方也会提供详尽的文档和示例,帮助开发者快速上手和解决问题。此外,活跃的社区支持也是Dojo的一大特色,开发者可以通过论坛、邮件列表等方式获取帮助。 综上所述,...

    Dojo的高级运用:Widget的制作

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

    dojo 官方教程 中文翻译

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

    dojo的datagrid使用

    Dojo是流行的JavaScript库,提供了一系列强大的UI组件,DataGrid就是其中之一,用于显示和操作表格数据。 1. **Dojo DataGrid简介** Dojo DataGrid是一个功能丰富的表格控件,它允许用户以表格形式展示大量数据,...

    Dojo 1.10版离线参考手册

    - `dojo/store` 和 `dojo/data`:用于与后端数据源交互,提供数据模型和存储API。 - `dojo/json` 和 `dojo/xml`:支持JSON和XML数据格式的解析和序列化。 5. **Dojo FX动画**: - `dojo/fx` 提供了基础的动画...

    dojo精品中文教程(全)

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

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

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

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

    【DOJO开发指南】 DOJO 是一个开源的JavaScript工具库,设计用于简化Web应用程序的开发,特别是富互联网应用...通过深入理解和熟练使用DOJO,开发者可以大大提高工作效率,创建出功能丰富、用户体验优良的Web应用。

    Dojo框架使用教程

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

    dojo官方教程中文版 pdf 非扫描

    "dojo官方教程中文版 pdf 非扫描"涵盖了Dojo的这些核心功能和使用方法,是开发者深入学习和实践Dojo的宝贵资料。通过阅读和实践教程中的示例,开发者可以掌握Dojo的精髓,提升Web开发效率和应用质量。

    dojo权威入门教程

    DataStore是Dojo用来存储和管理数据的组件,它可以连接到各种数据源,如XML、JSON等。你将学习如何使用DataStore与Widgets配合,实现动态数据展示和交互。 Dojo还包含了一套强大的Ajax和IO工具,如`dojo.xhr`,用于...

    dojo相关详细资料

    Dojo 是一个强大的JavaScript工具库,它为Web开发提供了丰富的功能和组件,涵盖了从DOM操作、事件处理到AJAX通信、动画效果等各个方面。在深入理解Dojo之前,我们需要了解JavaScript在网页开发中的核心地位以及它...

    dojo-release-1.6.1-src.zip

    Dojo 是一个广泛使用的JavaScript库,它提供了丰富的功能和工具,帮助开发者构建高性能、可维护的Web应用程序。这个压缩包包含的是源代码,对于那些想要深入了解Dojo工作原理或者想要对其进行定制的开发者来说,是...

    dojo教程 dojo 教程大全

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

Global site tag (gtag.js) - Google Analytics