远-方的博客

dojo.data--dojo学习

什么是dojo.data?
dojo.data模块提供了一些数据存储对象,这些对象是可以使用javascript来访问的各种不同类型的数据

源,一个数据源可以是一个简单的数据文件,一个如Yahoo提供的del.icio.us站点提供的Web Service,

或者一个关系数据库或XML数据库。
dojo.data要实现的目标就是有一套标准的数据访问API,和大量遵守这些数据访问API的数据存储结构。

 

有哪些可以使用的数据存储呢?

截止2007年1月,我们有5种简单的数据存储:
dojo.data.CsvStore:一个只读存储,从.csv格式文件中读取列表格式的数据
dojo.data.OpmlStore:一个只读存储,从.ompl格式文件中读取层次关系的数据
dojo.data.YahooStore:一个只读存储,可以通过Yahoo搜索引擎web service读取搜索结果。
dojo.data.DeliciousStore:一个只读存储,可以从del.icio.us Web service读取bookmarks。
dojo.data.RdfStore:一个读写存储,使用SPARQL与RDF数据服务联系,如:Rhizome RDF应用程序服务器。

 

dojo.data APIs
所有的dojo数据存储的实施都是符合一个标准的数据访问API集合的,虽然dojo.data.CsvStore与

dojo.data.YahooStore是从完全不同的数据源读取数据,但是它们却提供了完全相同的访问存储中数据

的方法。

dojo.data APIs的基本操作是非常简单的--创建一个Item,删除一个Item,设置一个属性值,取得一个

属性值等,我们把这些操作分到不同的组中,第一段是只读访问方法,第二段是写访问方法,然后是其

他较少使用的如属性,版本,更新提示等。

几个基本数据访问API:
dojo.data.core.Read--10个基本的只读访问方法
dojo.data.core.Write--9个基本的创建数据Item和更新属性值的方法
dojo.data.core.Identity--2个数据存储能唯一识别Item的方法。

 

术语:

data source --放置原始数据的来源,比如一个.csv文件,它可以是一个文件,一个数据库服务器,一个web服务等

datastore --一个JavaScript 对象,它可以从data source读取数据并可使数据通过dojo.data APIs读取。

dojo.data APIs --数据存储实施的方法的标准集合。dojo.data模块包括了一个APIs集合(Read,Write

等),一个datastore可以实施一个或多个APIs.

internal data representation --一个数据存储用来在内存中缓存数据的专用数据结构(XML DOM

nodes,JSON 对象,数组的数组等)

Item --一个有着属性和属性值的数据项,如:Title:'Alien', Year:1979, Producer:'Ridley Scott'。

attribute --item的一个字段或属性

value --一个item的属性的内容

reference --一个Item的值指向了另一个Item

identity --在一个单datastore中用来唯一识别一个Item的标识符。

query --用来在一个datastore中查询一些符合条件的Item的子集,一个qurey通常是一个字符串,但在

一些datastores中它可能是一个数字或一个date日期,或一个复杂的结构化对象。

 

相互关系图:

dojo.data的一个目标就是减小一个widget的数据提供者部分的代码,由于我们有了标准的dojo.data

APIs,一个widget作者能够写一个widget并使用dojo.data APIs来绑定数据,并在widget中显示出来。

widget自身的与dojo.data APIs是完全独立的,所以不需要了解数据访问是如何实现的,而且一个

widget可以使用各种各样的datastore。

 

dojo.data.api

 

Concept 1: Data access is broken down into separate APIs

dojo.data.api.Read:读取数据Item和其属性

dojo.data.api.Write:创建、删除和更新数据item及其属性

dojo.data.api.Identity:通过Item的标识identifier找到定位一个item

dojo.data.api.Notification:在一个store中的数据Item上发生了change事件时通知监听器listeners.

这些change包括create,delete和update.


Concept 2: All items are operated on through store functions

注意:属性不能通过Item对象来直接访问!

正确的访问方法:

var store = new some.data.Store();
var items;
... //Assume in this time items is now an array populated by a call to store.fetch();
//To iterate over the items and print out the value of a 'foo' attribute, you would do the

following:
for (var i = 0; i < items.length; i++){
    var item = items[i];
    console.log("For attribute 'foo' value was: [" + store.getValue(item, "foo") + "]");
}

 

错误的访问方法:

var value = item["foo"];
var value = item.foo;
var value = item.getValue("foo"); 

使用store的方法来访问Item的属性的原因是可以精简store的内部结构,提高访问效率等!

 

可以使用store的getFeatures()函数列出其支持的api:

Listing the APIs supported by a datastore

<script type="text/javascript"
djConfig="parseOnLoad: true, isDebug: true"
src="/dojo/dojo/dojo.js"></script>

var store = new some.Datastore();
var features = store.getFeatures();
for(var i in features){
  console.log("Store supports feature: " + i);
}
目前dojo.data.ItemFileWriteStore支持4种api:
dojo.data.api.Read
dojo.data.api.Identity
dojo.data.api.Write
dojo.data.api.Notification

dojo.data.ItemFileReadStore支持2种api:
dojo.data.api.Read
dojo.data.api.Identity
 

posted on 2009-11-24 16:16  远-方  阅读(661)  评论(2编辑  收藏  举报

导航