今天说说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相关推荐

  1. ajax dojo deferred,dojo(四):ajax请求

    储备知识 1.在介绍新版本的ajax请求之前,需要先了解一些dojo/Deferreds. 初次听到"Deferred"这个概念,可能会觉得这是一个神秘的东西.实际上它在执行异步操 ...

  2. 《dojo 边学边用》(01), 初识dojo,dojo简介和框架概览

    <dojo 边学边用>(01), 初识dojo,dojo简介和框架概览       首先,我也是因为新的工作,需要用到dojo,之前一直是用jQuery,对dojo之前没有过接触.于是就准 ...

  3. Dojo学习笔记(8. dojo.event dojo.event.topic dojo.event.browser)

    Dojo学习笔记(8. dojo.event & dojo.event.topic & dojo.event.browser) 模块:dojo.event 终于进入有名的dojo事件处 ...

  4. 大三小学期进阶课程第二十一课:reinforcement learning and data driven approaches

    第21课.reinforcement learning and data driven approaches 解决规划问题,不能一上来就开始data driven,而是一步步来从rule based这 ...

  5. 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 基 ...

  6. 【dojo】dojo.ready(dojo.addOnLoad) “前传”

    最近的项目中使用了dojo框架,每个页面中大量使用了 dojo.ready 来完成页面初始化的工作.但因为某种原因,需要在所有的 dojo.ready 之前做一些事. 对于 dojo 1.6 以前(包 ...

  7. 机器学习概念记忆卡片01-基于Learning from data一书

    前言 最近学习了Cousera上Dr. Barbara Oakley和Dr. Terrence Sejnowski关于学习方法论指导的课程(涉及浅显认知神经科学的知识)的文章.发现小学时候这种知识卡片 ...

  8. Machine Learning 和 Data Science 的最佳公共数据集

    什么是机器学习的最佳数据集?本文整理了一个高质量.多样化的机器学习数据集榜单. AUTHORS: Stacy Stanford, Machine Learning Memoirs Inc. Rober ...

  9. Learning Active Learning from Data 主动学习笔记

    最近这段时间都在看关于主动学习的文章,现在分享自己看的这篇文章,希望与大家共勉! 这是2017在NIPS上发表的一篇文章:Learning Active Learning from Data 文章目录 ...

最新文章

  1. [WTL] STLport安装指南
  2. 专业软件测试面试题汇总
  3. bzoj1334[Baltic2008]Elect(背包dp)
  4. Redis运维和开发学习笔记(7) 内存管理和过期策略
  5. API Gateway——KONG简单入门
  6. snort的详细配置
  7. oracle并行查询结果不唯一,Oracle数据库并行查询出错的解决方法
  8. 给定随机数列求第k大的数字
  9. vue-amap - 基于Vue2.0和高德地图的地图组件
  10. webpack如何全局引入jquery和echarts?
  11. 三种非对称加密算法总结
  12. fanuc机器人与示教器配对_FANUC机器人示教器维修
  13. sm是什么职位_dsm和sm分别是外企啥职务
  14. 运动目标检测之光流法(2):金字塔Lucas-Kanade算法
  15. Android 接口的default 方法运行时报错AbstractMethodError
  16. 耳机的危害有多严重?哪种耳机对耳朵伤害小?
  17. 【input 身份证号】星号 代替,input 切割成 多个 小格格(类似)
  18. [编程题]:n头牛中选择满足所有m种特性的牛(百度2021)
  19. 兴趣爱好选择程序java+Swing界面
  20. 【实用小工具】如何用Python语音合成,以及文字转语音~

热门文章

  1. 电脑蓝屏故障分析大全
  2. 安装ttf-mscorefonts-installer的方法
  3. 频谱仪RBW带宽和VBW带宽
  4. HC18P110L芯圣开发笔记(二)各种外设,PIN,button,pwm,ADC
  5. 特征选择-皮尔逊系数、RFE(原理及代码)
  6. 【自学】MySQL学习总结
  7. android 仿小红书标签,仿小红书的图片标签
  8. 数据结构与算法-4-链表的基本操作-增
  9. NVIDIA DPU — 安装部署
  10. 有意思!细长件物料的自动搬运机器人/AGV