Dojo Learning: Dojo.data
今天说说dojo的数据模块。dojo提供了一个统一的封装的数据存取API——dojo.data。dojo.data提供了很多store类用来从不同的数据源读取数据并提供用户访问的接口。如处理JSON格式数据的ItemFileReadStore类,处理CSV格式数据的CsvStore类,处理XML格式数据的XmlStore类。这些Store类可以看成是传统数据库中的数据表(data table),而Store中的item则是数据库中的数据行(data row),每个item中的attribute则是数据行中的数据列(data column),Store中的query属性就是数据库中的查询条件了。这些类的使用方法大同小异,下面用 ItemFileReadStore作为例子来具体说明使用方法。
ItemFileReadStore是用来处理JSON数据的,JSON数据是JavaScript Object Notation,是一种轻量级的数据交换格式。它是基于Javascript标准的一个子集,JavaScriptd的数据结构(如字符串、数组、对象)的表示方式恰好与JSON相同,所以JSON可以被Javascript无损的识别。它是一种简单文本格式,与XML相比,它更加易读、更少的数据冗余。
下面定义一段简单的JSON文件:
{
identifier: 'name',
items: [
{ name: 'Adobo', aisle: 'Mexican' },
{ name: 'Balsamic vinegar', aisle: 'Condiments' },
{ name: 'Basil', aisle: 'Spices' },
{ name: 'Bay leaf', aisle: 'Spices' },
{ name: 'Beef Bouillon Granules', aisle: 'Soup' },
{ name: 'Vinegar', aisle: 'Condiments' },
{ name: 'White cooking wine', aisle: 'Condiments' },
{ name: 'Worcestershire Sauce', aisle: 'Condiments' }
] }
熟悉JavaScipt的朋友应该对这样的代码很熟悉。{}表示定义一个对象,其中定义了两个属性identifier和items。其中identifier的值表示这个数据的主键,而items的值是一个JS的数组,数组的单个值也是一个对象,其中的属性即是数据项。
将这个JSON代码保存成一个文件,如“pantry_spices.json”
然后定义一个处理次JSON数据的ItemFileReadStore对象。与之前用到的Bottom一样,同样有两种定义方式。不管哪种方法,都要先引入必要的dojo文件:
dojo.require("dojo.data.ItemFileReadStore");
第一种方法是在html的body中定义:
<div dojoType="dojo.data.ItemFileReadStore" jsId="pantryStore"
url="data/pantry_items.json"></div>
很简单,定义div的dojoType和数据源url,jsId则是为了方便JS中调用此对象:定义了jsId,在JS代码中调用此对象就不必使用document.getElementById或dojo.byId那么麻烦,可以直接使用此对象的jsId来调用。
第二种方法是JS编程定义,也很简单。
var pantryStore = new dojo.data.ItemFileReadStore({url: "data/pantry_items.json" } );
这样就定义了一个ItemFileReadStore的对象pantryStore,接着就是从中读取数据。通常使用ItemFileReadStore的fetch方法实现。此方法的参数是一个对象,其中主要包含下列参数:
query:查询条件,格式为一个Object对象,其中属性名为需要满足条件的数据属性名,而属性值为此属性需要满足的查询条件,可支持通配符,”?”,”*”表示一个或多个字符(包含0个)。多个属性则表示多个条件的and关系。
如此例中定义一个query对象:
var queryObj={name:"B*",aisle:"*p*"};
表示查询name中以"B"开头且aisle中包含"P"的数据项。
onBegin:读取开始前调用的方法,传入参数为查询到的item的数量值和request对象
onError:读取出现异常时调用的方法,传入参数为error对象以及request对象。
onItem:读取每个item时调用的方法,传入参数为当前的item对象及request对象。
onComplete:读取结束时调用的方法,传入参数为读取的items数组及request对象。不过使用时发现onComplete如果与onItem同时使用,则传入的items数组为空,不知为何。。。。还需要继续研究,不知是不是dojo的bug。
因此定义一次查询的代码如下:
pantryStore.fetch({ onComplete: gotList, onItem: doOnItem, onError: gotError,query:queryObj});
其中goList,doOnitem,gotError分别是预先定义的处理方法,可根据需要定义。如在读取一个数据项时弹出对话框将此项的name和aisle显示出来,则可定义:
var doOnItem=function(item,request)
{
alert("name:"+pantryStore.getValue(item, "name")+";aisle:"+pantryStore.getValue(item, "aisle"));
}
其中getValue为ItemFileReadStore对象的方法,用来取得item中某个属性的值。其实,不使用此方法,使用item.name[0]也能取得item的name属性值。
除此之外,ItemFileReadStore对象还有很多其他很有用的方法,如getIdentity(item),getAttributes(item)
Dojo Learning: Dojo.data相关推荐
- ajax dojo deferred,dojo(四):ajax请求
储备知识 1.在介绍新版本的ajax请求之前,需要先了解一些dojo/Deferreds. 初次听到"Deferred"这个概念,可能会觉得这是一个神秘的东西.实际上它在执行异步操 ...
- 《dojo 边学边用》(01), 初识dojo,dojo简介和框架概览
<dojo 边学边用>(01), 初识dojo,dojo简介和框架概览 首先,我也是因为新的工作,需要用到dojo,之前一直是用jQuery,对dojo之前没有过接触.于是就准 ...
- Dojo学习笔记(8. dojo.event dojo.event.topic dojo.event.browser)
Dojo学习笔记(8. dojo.event & dojo.event.topic & dojo.event.browser) 模块:dojo.event 终于进入有名的dojo事件处 ...
- 大三小学期进阶课程第二十一课:reinforcement learning and data driven approaches
第21课.reinforcement learning and data driven approaches 解决规划问题,不能一上来就开始data driven,而是一步步来从rule based这 ...
- Automated defect inspection system for metal surfaces based on deep learning and data augmentation
Automated defect inspection system for metal surfaces based on deep learning and data augmentation 基 ...
- 【dojo】dojo.ready(dojo.addOnLoad) “前传”
最近的项目中使用了dojo框架,每个页面中大量使用了 dojo.ready 来完成页面初始化的工作.但因为某种原因,需要在所有的 dojo.ready 之前做一些事. 对于 dojo 1.6 以前(包 ...
- 机器学习概念记忆卡片01-基于Learning from data一书
前言 最近学习了Cousera上Dr. Barbara Oakley和Dr. Terrence Sejnowski关于学习方法论指导的课程(涉及浅显认知神经科学的知识)的文章.发现小学时候这种知识卡片 ...
- Machine Learning 和 Data Science 的最佳公共数据集
什么是机器学习的最佳数据集?本文整理了一个高质量.多样化的机器学习数据集榜单. AUTHORS: Stacy Stanford, Machine Learning Memoirs Inc. Rober ...
- Learning Active Learning from Data 主动学习笔记
最近这段时间都在看关于主动学习的文章,现在分享自己看的这篇文章,希望与大家共勉! 这是2017在NIPS上发表的一篇文章:Learning Active Learning from Data 文章目录 ...
最新文章
- [WTL] STLport安装指南
- 专业软件测试面试题汇总
- bzoj1334[Baltic2008]Elect(背包dp)
- Redis运维和开发学习笔记(7) 内存管理和过期策略
- API Gateway——KONG简单入门
- snort的详细配置
- oracle并行查询结果不唯一,Oracle数据库并行查询出错的解决方法
- 给定随机数列求第k大的数字
- vue-amap - 基于Vue2.0和高德地图的地图组件
- webpack如何全局引入jquery和echarts?
- 三种非对称加密算法总结
- fanuc机器人与示教器配对_FANUC机器人示教器维修
- sm是什么职位_dsm和sm分别是外企啥职务
- 运动目标检测之光流法(2):金字塔Lucas-Kanade算法
- Android 接口的default 方法运行时报错AbstractMethodError
- 耳机的危害有多严重?哪种耳机对耳朵伤害小?
- 【input 身份证号】星号 代替,input 切割成 多个 小格格(类似)
- [编程题]:n头牛中选择满足所有m种特性的牛(百度2021)
- 兴趣爱好选择程序java+Swing界面
- 【实用小工具】如何用Python语音合成,以及文字转语音~