Dojo.data是一种类似于JDBC的API规范,dojo.data驱动实现了这些规范,并且负责响应那些来自于数据小部件的请求。一般来讲,每个驱动程序负责一种不同的数据提供者格式,例如JSON或者XML。
先大致介绍下数据驱动中的ItemFileReadStore:
这个stroe可以使用HTTP读取json格式的内容,或者从内存中读取js对象,并把所有items都存储在内存中。
其中identifier是用来一标识一个item的。有时会出现label属性,它是用来标识我们需要看到的那个item的属性值的。
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd"> <html xmlns="http://www.w3.org/1999/xhtml" lang="en"> <head> <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> <title>mixin</title> <meta name="author" content="zhou" /> <script src= "dojo16/dojo/dojo.js" data-dojo-config="isDebug: true, async: true,parseOnload:true"></script> <script src = "mixin.js"></script> </head> <body> <button dojoType="dijit.form.Button" onclick="getData();"> 获取数据 </button> <br/> <br/> <div id="dataOutput"> </div> </body> </html>
dojo.require("dojo.data.ItemFileReadStore"); var countryStore = new dojo.data.ItemFileReadStore({ url : "abc.json" }); //onComplete的事件处理程序,将取出来的数据(items)放到dojo.byId("dataOutput")中去 var gotContinents = function(items, request) { var buffer = ["<b>获取的数据:</b>"]; for(var i = 0; i < items.length; i++) { var item = items[i]; buffer.push(countryStore.getLabel(item)); } //这里简单地将取出来的items的label连接在一起 dojo.byId("dataOutput").innerHTML = buffer.join("<br/>"); } function getData(query) { countryStore.fetch({ query : {name : "*"}, onComplete : gotContinents }); };
{ "identifier": "name", "label":"name", "items": [ { "name": "Bob", "spouse": {"_reference":"Sally"}, "children": [ { "_reference":"Nancy"}]}, { "name": "Sally", "spouse": {"_reference":"Bob"}, "children": [ { "_reference":"Nancy"}]}, { "name": "Nancy"}, ] }