]>
Commit | Line | Data |
---|---|---|
2f01fe57 AD |
1 | /* |
2 | Copyright (c) 2004-2010, The Dojo Foundation All Rights Reserved. | |
3 | Available via Academic Free License >= 2.1 OR the modified BSD license. | |
4 | see: http://dojotoolkit.org/license for details | |
5 | */ | |
6 | ||
7 | ||
8 | if(!dojo._hasResource["dojo.data.ItemFileReadStore"]){ | |
9 | dojo._hasResource["dojo.data.ItemFileReadStore"]=true; | |
10 | dojo.provide("dojo.data.ItemFileReadStore"); | |
11 | dojo.require("dojo.data.util.filter"); | |
12 | dojo.require("dojo.data.util.simpleFetch"); | |
13 | dojo.require("dojo.date.stamp"); | |
14 | dojo.declare("dojo.data.ItemFileReadStore",null,{constructor:function(_1){ | |
15 | this._arrayOfAllItems=[]; | |
16 | this._arrayOfTopLevelItems=[]; | |
17 | this._loadFinished=false; | |
18 | this._jsonFileUrl=_1.url; | |
19 | this._ccUrl=_1.url; | |
20 | this.url=_1.url; | |
21 | this._jsonData=_1.data; | |
22 | this.data=null; | |
23 | this._datatypeMap=_1.typeMap||{}; | |
24 | if(!this._datatypeMap["Date"]){ | |
25 | this._datatypeMap["Date"]={type:Date,deserialize:function(_2){ | |
26 | return dojo.date.stamp.fromISOString(_2); | |
27 | }}; | |
28 | } | |
29 | this._features={"dojo.data.api.Read":true,"dojo.data.api.Identity":true}; | |
30 | this._itemsByIdentity=null; | |
31 | this._storeRefPropName="_S"; | |
32 | this._itemNumPropName="_0"; | |
33 | this._rootItemPropName="_RI"; | |
34 | this._reverseRefMap="_RRM"; | |
35 | this._loadInProgress=false; | |
36 | this._queuedFetches=[]; | |
37 | if(_1.urlPreventCache!==undefined){ | |
38 | this.urlPreventCache=_1.urlPreventCache?true:false; | |
39 | } | |
40 | if(_1.hierarchical!==undefined){ | |
41 | this.hierarchical=_1.hierarchical?true:false; | |
42 | } | |
43 | if(_1.clearOnClose){ | |
44 | this.clearOnClose=true; | |
45 | } | |
46 | if("failOk" in _1){ | |
47 | this.failOk=_1.failOk?true:false; | |
48 | } | |
49 | },url:"",_ccUrl:"",data:null,typeMap:null,clearOnClose:false,urlPreventCache:false,failOk:false,hierarchical:true,_assertIsItem:function(_3){ | |
50 | if(!this.isItem(_3)){ | |
51 | throw new Error("dojo.data.ItemFileReadStore: Invalid item argument."); | |
52 | } | |
53 | },_assertIsAttribute:function(_4){ | |
54 | if(typeof _4!=="string"){ | |
55 | throw new Error("dojo.data.ItemFileReadStore: Invalid attribute argument."); | |
56 | } | |
57 | },getValue:function(_5,_6,_7){ | |
58 | var _8=this.getValues(_5,_6); | |
59 | return (_8.length>0)?_8[0]:_7; | |
60 | },getValues:function(_9,_a){ | |
61 | this._assertIsItem(_9); | |
62 | this._assertIsAttribute(_a); | |
63 | return (_9[_a]||[]).slice(0); | |
64 | },getAttributes:function(_b){ | |
65 | this._assertIsItem(_b); | |
66 | var _c=[]; | |
67 | for(var _d in _b){ | |
68 | if((_d!==this._storeRefPropName)&&(_d!==this._itemNumPropName)&&(_d!==this._rootItemPropName)&&(_d!==this._reverseRefMap)){ | |
69 | _c.push(_d); | |
70 | } | |
71 | } | |
72 | return _c; | |
73 | },hasAttribute:function(_e,_f){ | |
74 | this._assertIsItem(_e); | |
75 | this._assertIsAttribute(_f); | |
76 | return (_f in _e); | |
77 | },containsValue:function(_10,_11,_12){ | |
78 | var _13=undefined; | |
79 | if(typeof _12==="string"){ | |
80 | _13=dojo.data.util.filter.patternToRegExp(_12,false); | |
81 | } | |
82 | return this._containsValue(_10,_11,_12,_13); | |
83 | },_containsValue:function(_14,_15,_16,_17){ | |
84 | return dojo.some(this.getValues(_14,_15),function(_18){ | |
85 | if(_18!==null&&!dojo.isObject(_18)&&_17){ | |
86 | if(_18.toString().match(_17)){ | |
87 | return true; | |
88 | } | |
89 | }else{ | |
90 | if(_16===_18){ | |
91 | return true; | |
92 | } | |
93 | } | |
94 | }); | |
95 | },isItem:function(_19){ | |
96 | if(_19&&_19[this._storeRefPropName]===this){ | |
97 | if(this._arrayOfAllItems[_19[this._itemNumPropName]]===_19){ | |
98 | return true; | |
99 | } | |
100 | } | |
101 | return false; | |
102 | },isItemLoaded:function(_1a){ | |
103 | return this.isItem(_1a); | |
104 | },loadItem:function(_1b){ | |
105 | this._assertIsItem(_1b.item); | |
106 | },getFeatures:function(){ | |
107 | return this._features; | |
108 | },getLabel:function(_1c){ | |
109 | if(this._labelAttr&&this.isItem(_1c)){ | |
110 | return this.getValue(_1c,this._labelAttr); | |
111 | } | |
112 | return undefined; | |
113 | },getLabelAttributes:function(_1d){ | |
114 | if(this._labelAttr){ | |
115 | return [this._labelAttr]; | |
116 | } | |
117 | return null; | |
118 | },_fetchItems:function(_1e,_1f,_20){ | |
119 | var _21=this,_22=function(_23,_24){ | |
120 | var _25=[],i,key; | |
121 | if(_23.query){ | |
122 | var _26,_27=_23.queryOptions?_23.queryOptions.ignoreCase:false; | |
123 | var _28={}; | |
124 | for(key in _23.query){ | |
125 | _26=_23.query[key]; | |
126 | if(typeof _26==="string"){ | |
127 | _28[key]=dojo.data.util.filter.patternToRegExp(_26,_27); | |
128 | }else{ | |
129 | if(_26 instanceof RegExp){ | |
130 | _28[key]=_26; | |
131 | } | |
132 | } | |
133 | } | |
134 | for(i=0;i<_24.length;++i){ | |
135 | var _29=true; | |
136 | var _2a=_24[i]; | |
137 | if(_2a===null){ | |
138 | _29=false; | |
139 | }else{ | |
140 | for(key in _23.query){ | |
141 | _26=_23.query[key]; | |
142 | if(!_21._containsValue(_2a,key,_26,_28[key])){ | |
143 | _29=false; | |
144 | } | |
145 | } | |
146 | } | |
147 | if(_29){ | |
148 | _25.push(_2a); | |
149 | } | |
150 | } | |
151 | _1f(_25,_23); | |
152 | }else{ | |
153 | for(i=0;i<_24.length;++i){ | |
154 | var _2b=_24[i]; | |
155 | if(_2b!==null){ | |
156 | _25.push(_2b); | |
157 | } | |
158 | } | |
159 | _1f(_25,_23); | |
160 | } | |
161 | }; | |
162 | if(this._loadFinished){ | |
163 | _22(_1e,this._getItemsArray(_1e.queryOptions)); | |
164 | }else{ | |
165 | if(this._jsonFileUrl!==this._ccUrl){ | |
166 | dojo.deprecated("dojo.data.ItemFileReadStore: ","To change the url, set the url property of the store,"+" not _jsonFileUrl. _jsonFileUrl support will be removed in 2.0"); | |
167 | this._ccUrl=this._jsonFileUrl; | |
168 | this.url=this._jsonFileUrl; | |
169 | }else{ | |
170 | if(this.url!==this._ccUrl){ | |
171 | this._jsonFileUrl=this.url; | |
172 | this._ccUrl=this.url; | |
173 | } | |
174 | } | |
175 | if(this.data!=null&&this._jsonData==null){ | |
176 | this._jsonData=this.data; | |
177 | this.data=null; | |
178 | } | |
179 | if(this._jsonFileUrl){ | |
180 | if(this._loadInProgress){ | |
181 | this._queuedFetches.push({args:_1e,filter:_22}); | |
182 | }else{ | |
183 | this._loadInProgress=true; | |
184 | var _2c={url:_21._jsonFileUrl,handleAs:"json-comment-optional",preventCache:this.urlPreventCache,failOk:this.failOk}; | |
185 | var _2d=dojo.xhrGet(_2c); | |
186 | _2d.addCallback(function(_2e){ | |
187 | try{ | |
188 | _21._getItemsFromLoadedData(_2e); | |
189 | _21._loadFinished=true; | |
190 | _21._loadInProgress=false; | |
191 | _22(_1e,_21._getItemsArray(_1e.queryOptions)); | |
192 | _21._handleQueuedFetches(); | |
193 | } | |
194 | catch(e){ | |
195 | _21._loadFinished=true; | |
196 | _21._loadInProgress=false; | |
197 | _20(e,_1e); | |
198 | } | |
199 | }); | |
200 | _2d.addErrback(function(_2f){ | |
201 | _21._loadInProgress=false; | |
202 | _20(_2f,_1e); | |
203 | }); | |
204 | var _30=null; | |
205 | if(_1e.abort){ | |
206 | _30=_1e.abort; | |
207 | } | |
208 | _1e.abort=function(){ | |
209 | var df=_2d; | |
210 | if(df&&df.fired===-1){ | |
211 | df.cancel(); | |
212 | df=null; | |
213 | } | |
214 | if(_30){ | |
215 | _30.call(_1e); | |
216 | } | |
217 | }; | |
218 | } | |
219 | }else{ | |
220 | if(this._jsonData){ | |
221 | try{ | |
222 | this._loadFinished=true; | |
223 | this._getItemsFromLoadedData(this._jsonData); | |
224 | this._jsonData=null; | |
225 | _22(_1e,this._getItemsArray(_1e.queryOptions)); | |
226 | } | |
227 | catch(e){ | |
228 | _20(e,_1e); | |
229 | } | |
230 | }else{ | |
231 | _20(new Error("dojo.data.ItemFileReadStore: No JSON source data was provided as either URL or a nested Javascript object."),_1e); | |
232 | } | |
233 | } | |
234 | } | |
235 | },_handleQueuedFetches:function(){ | |
236 | if(this._queuedFetches.length>0){ | |
237 | for(var i=0;i<this._queuedFetches.length;i++){ | |
238 | var _31=this._queuedFetches[i],_32=_31.args,_33=_31.filter; | |
239 | if(_33){ | |
240 | _33(_32,this._getItemsArray(_32.queryOptions)); | |
241 | }else{ | |
242 | this.fetchItemByIdentity(_32); | |
243 | } | |
244 | } | |
245 | this._queuedFetches=[]; | |
246 | } | |
247 | },_getItemsArray:function(_34){ | |
248 | if(_34&&_34.deep){ | |
249 | return this._arrayOfAllItems; | |
250 | } | |
251 | return this._arrayOfTopLevelItems; | |
252 | },close:function(_35){ | |
253 | if(this.clearOnClose&&this._loadFinished&&!this._loadInProgress){ | |
254 | if(((this._jsonFileUrl==""||this._jsonFileUrl==null)&&(this.url==""||this.url==null))&&this.data==null){ | |
255 | } | |
256 | this._arrayOfAllItems=[]; | |
257 | this._arrayOfTopLevelItems=[]; | |
258 | this._loadFinished=false; | |
259 | this._itemsByIdentity=null; | |
260 | this._loadInProgress=false; | |
261 | this._queuedFetches=[]; | |
262 | } | |
263 | },_getItemsFromLoadedData:function(_36){ | |
264 | var _37=false,_38=this; | |
265 | function _39(_3a){ | |
266 | var _3b=((_3a!==null)&&(typeof _3a==="object")&&(!dojo.isArray(_3a)||_37)&&(!dojo.isFunction(_3a))&&(_3a.constructor==Object||dojo.isArray(_3a))&&(typeof _3a._reference==="undefined")&&(typeof _3a._type==="undefined")&&(typeof _3a._value==="undefined")&&_38.hierarchical); | |
267 | return _3b; | |
268 | }; | |
269 | function _3c(_3d){ | |
270 | _38._arrayOfAllItems.push(_3d); | |
271 | for(var _3e in _3d){ | |
272 | var _3f=_3d[_3e]; | |
273 | if(_3f){ | |
274 | if(dojo.isArray(_3f)){ | |
275 | var _40=_3f; | |
276 | for(var k=0;k<_40.length;++k){ | |
277 | var _41=_40[k]; | |
278 | if(_39(_41)){ | |
279 | _3c(_41); | |
280 | } | |
281 | } | |
282 | }else{ | |
283 | if(_39(_3f)){ | |
284 | _3c(_3f); | |
285 | } | |
286 | } | |
287 | } | |
288 | } | |
289 | }; | |
290 | this._labelAttr=_36.label; | |
291 | var i,_42; | |
292 | this._arrayOfAllItems=[]; | |
293 | this._arrayOfTopLevelItems=_36.items; | |
294 | for(i=0;i<this._arrayOfTopLevelItems.length;++i){ | |
295 | _42=this._arrayOfTopLevelItems[i]; | |
296 | if(dojo.isArray(_42)){ | |
297 | _37=true; | |
298 | } | |
299 | _3c(_42); | |
300 | _42[this._rootItemPropName]=true; | |
301 | } | |
302 | var _43={},key; | |
303 | for(i=0;i<this._arrayOfAllItems.length;++i){ | |
304 | _42=this._arrayOfAllItems[i]; | |
305 | for(key in _42){ | |
306 | if(key!==this._rootItemPropName){ | |
307 | var _44=_42[key]; | |
308 | if(_44!==null){ | |
309 | if(!dojo.isArray(_44)){ | |
310 | _42[key]=[_44]; | |
311 | } | |
312 | }else{ | |
313 | _42[key]=[null]; | |
314 | } | |
315 | } | |
316 | _43[key]=key; | |
317 | } | |
318 | } | |
319 | while(_43[this._storeRefPropName]){ | |
320 | this._storeRefPropName+="_"; | |
321 | } | |
322 | while(_43[this._itemNumPropName]){ | |
323 | this._itemNumPropName+="_"; | |
324 | } | |
325 | while(_43[this._reverseRefMap]){ | |
326 | this._reverseRefMap+="_"; | |
327 | } | |
328 | var _45; | |
329 | var _46=_36.identifier; | |
330 | if(_46){ | |
331 | this._itemsByIdentity={}; | |
332 | this._features["dojo.data.api.Identity"]=_46; | |
333 | for(i=0;i<this._arrayOfAllItems.length;++i){ | |
334 | _42=this._arrayOfAllItems[i]; | |
335 | _45=_42[_46]; | |
336 | var _47=_45[0]; | |
337 | if(!this._itemsByIdentity[_47]){ | |
338 | this._itemsByIdentity[_47]=_42; | |
339 | }else{ | |
340 | if(this._jsonFileUrl){ | |
341 | throw new Error("dojo.data.ItemFileReadStore: The json data as specified by: ["+this._jsonFileUrl+"] is malformed. Items within the list have identifier: ["+_46+"]. Value collided: ["+_47+"]"); | |
342 | }else{ | |
343 | if(this._jsonData){ | |
344 | throw new Error("dojo.data.ItemFileReadStore: The json data provided by the creation arguments is malformed. Items within the list have identifier: ["+_46+"]. Value collided: ["+_47+"]"); | |
345 | } | |
346 | } | |
347 | } | |
348 | } | |
349 | }else{ | |
350 | this._features["dojo.data.api.Identity"]=Number; | |
351 | } | |
352 | for(i=0;i<this._arrayOfAllItems.length;++i){ | |
353 | _42=this._arrayOfAllItems[i]; | |
354 | _42[this._storeRefPropName]=this; | |
355 | _42[this._itemNumPropName]=i; | |
356 | } | |
357 | for(i=0;i<this._arrayOfAllItems.length;++i){ | |
358 | _42=this._arrayOfAllItems[i]; | |
359 | for(key in _42){ | |
360 | _45=_42[key]; | |
361 | for(var j=0;j<_45.length;++j){ | |
362 | _44=_45[j]; | |
363 | if(_44!==null&&typeof _44=="object"){ | |
364 | if(("_type" in _44)&&("_value" in _44)){ | |
365 | var _48=_44._type; | |
366 | var _49=this._datatypeMap[_48]; | |
367 | if(!_49){ | |
368 | throw new Error("dojo.data.ItemFileReadStore: in the typeMap constructor arg, no object class was specified for the datatype '"+_48+"'"); | |
369 | }else{ | |
370 | if(dojo.isFunction(_49)){ | |
371 | _45[j]=new _49(_44._value); | |
372 | }else{ | |
373 | if(dojo.isFunction(_49.deserialize)){ | |
374 | _45[j]=_49.deserialize(_44._value); | |
375 | }else{ | |
376 | throw new Error("dojo.data.ItemFileReadStore: Value provided in typeMap was neither a constructor, nor a an object with a deserialize function"); | |
377 | } | |
378 | } | |
379 | } | |
380 | } | |
381 | if(_44._reference){ | |
382 | var _4a=_44._reference; | |
383 | if(!dojo.isObject(_4a)){ | |
384 | _45[j]=this._getItemByIdentity(_4a); | |
385 | }else{ | |
386 | for(var k=0;k<this._arrayOfAllItems.length;++k){ | |
387 | var _4b=this._arrayOfAllItems[k],_4c=true; | |
388 | for(var _4d in _4a){ | |
389 | if(_4b[_4d]!=_4a[_4d]){ | |
390 | _4c=false; | |
391 | } | |
392 | } | |
393 | if(_4c){ | |
394 | _45[j]=_4b; | |
395 | } | |
396 | } | |
397 | } | |
398 | if(this.referenceIntegrity){ | |
399 | var _4e=_45[j]; | |
400 | if(this.isItem(_4e)){ | |
401 | this._addReferenceToMap(_4e,_42,key); | |
402 | } | |
403 | } | |
404 | }else{ | |
405 | if(this.isItem(_44)){ | |
406 | if(this.referenceIntegrity){ | |
407 | this._addReferenceToMap(_44,_42,key); | |
408 | } | |
409 | } | |
410 | } | |
411 | } | |
412 | } | |
413 | } | |
414 | } | |
415 | },_addReferenceToMap:function(_4f,_50,_51){ | |
416 | },getIdentity:function(_52){ | |
417 | var _53=this._features["dojo.data.api.Identity"]; | |
418 | if(_53===Number){ | |
419 | return _52[this._itemNumPropName]; | |
420 | }else{ | |
421 | var _54=_52[_53]; | |
422 | if(_54){ | |
423 | return _54[0]; | |
424 | } | |
425 | } | |
426 | return null; | |
427 | },fetchItemByIdentity:function(_55){ | |
428 | var _56,_57; | |
429 | if(!this._loadFinished){ | |
430 | var _58=this; | |
431 | if(this._jsonFileUrl!==this._ccUrl){ | |
432 | dojo.deprecated("dojo.data.ItemFileReadStore: ","To change the url, set the url property of the store,"+" not _jsonFileUrl. _jsonFileUrl support will be removed in 2.0"); | |
433 | this._ccUrl=this._jsonFileUrl; | |
434 | this.url=this._jsonFileUrl; | |
435 | }else{ | |
436 | if(this.url!==this._ccUrl){ | |
437 | this._jsonFileUrl=this.url; | |
438 | this._ccUrl=this.url; | |
439 | } | |
440 | } | |
441 | if(this.data!=null&&this._jsonData==null){ | |
442 | this._jsonData=this.data; | |
443 | this.data=null; | |
444 | } | |
445 | if(this._jsonFileUrl){ | |
446 | if(this._loadInProgress){ | |
447 | this._queuedFetches.push({args:_55}); | |
448 | }else{ | |
449 | this._loadInProgress=true; | |
450 | var _59={url:_58._jsonFileUrl,handleAs:"json-comment-optional",preventCache:this.urlPreventCache,failOk:this.failOk}; | |
451 | var _5a=dojo.xhrGet(_59); | |
452 | _5a.addCallback(function(_5b){ | |
453 | var _5c=_55.scope?_55.scope:dojo.global; | |
454 | try{ | |
455 | _58._getItemsFromLoadedData(_5b); | |
456 | _58._loadFinished=true; | |
457 | _58._loadInProgress=false; | |
458 | _56=_58._getItemByIdentity(_55.identity); | |
459 | if(_55.onItem){ | |
460 | _55.onItem.call(_5c,_56); | |
461 | } | |
462 | _58._handleQueuedFetches(); | |
463 | } | |
464 | catch(error){ | |
465 | _58._loadInProgress=false; | |
466 | if(_55.onError){ | |
467 | _55.onError.call(_5c,error); | |
468 | } | |
469 | } | |
470 | }); | |
471 | _5a.addErrback(function(_5d){ | |
472 | _58._loadInProgress=false; | |
473 | if(_55.onError){ | |
474 | var _5e=_55.scope?_55.scope:dojo.global; | |
475 | _55.onError.call(_5e,_5d); | |
476 | } | |
477 | }); | |
478 | } | |
479 | }else{ | |
480 | if(this._jsonData){ | |
481 | _58._getItemsFromLoadedData(_58._jsonData); | |
482 | _58._jsonData=null; | |
483 | _58._loadFinished=true; | |
484 | _56=_58._getItemByIdentity(_55.identity); | |
485 | if(_55.onItem){ | |
486 | _57=_55.scope?_55.scope:dojo.global; | |
487 | _55.onItem.call(_57,_56); | |
488 | } | |
489 | } | |
490 | } | |
491 | }else{ | |
492 | _56=this._getItemByIdentity(_55.identity); | |
493 | if(_55.onItem){ | |
494 | _57=_55.scope?_55.scope:dojo.global; | |
495 | _55.onItem.call(_57,_56); | |
496 | } | |
497 | } | |
498 | },_getItemByIdentity:function(_5f){ | |
499 | var _60=null; | |
500 | if(this._itemsByIdentity){ | |
501 | _60=this._itemsByIdentity[_5f]; | |
502 | }else{ | |
503 | _60=this._arrayOfAllItems[_5f]; | |
504 | } | |
505 | if(_60===undefined){ | |
506 | _60=null; | |
507 | } | |
508 | return _60; | |
509 | },getIdentityAttributes:function(_61){ | |
510 | var _62=this._features["dojo.data.api.Identity"]; | |
511 | if(_62===Number){ | |
512 | return null; | |
513 | }else{ | |
514 | return [_62]; | |
515 | } | |
516 | },_forceLoad:function(){ | |
517 | var _63=this; | |
518 | if(this._jsonFileUrl!==this._ccUrl){ | |
519 | dojo.deprecated("dojo.data.ItemFileReadStore: ","To change the url, set the url property of the store,"+" not _jsonFileUrl. _jsonFileUrl support will be removed in 2.0"); | |
520 | this._ccUrl=this._jsonFileUrl; | |
521 | this.url=this._jsonFileUrl; | |
522 | }else{ | |
523 | if(this.url!==this._ccUrl){ | |
524 | this._jsonFileUrl=this.url; | |
525 | this._ccUrl=this.url; | |
526 | } | |
527 | } | |
528 | if(this.data!=null&&this._jsonData==null){ | |
529 | this._jsonData=this.data; | |
530 | this.data=null; | |
531 | } | |
532 | if(this._jsonFileUrl){ | |
533 | var _64={url:this._jsonFileUrl,handleAs:"json-comment-optional",preventCache:this.urlPreventCache,failOk:this.failOk,sync:true}; | |
534 | var _65=dojo.xhrGet(_64); | |
535 | _65.addCallback(function(_66){ | |
536 | try{ | |
537 | if(_63._loadInProgress!==true&&!_63._loadFinished){ | |
538 | _63._getItemsFromLoadedData(_66); | |
539 | _63._loadFinished=true; | |
540 | }else{ | |
541 | if(_63._loadInProgress){ | |
542 | throw new Error("dojo.data.ItemFileReadStore: Unable to perform a synchronous load, an async load is in progress."); | |
543 | } | |
544 | } | |
545 | } | |
546 | catch(e){ | |
547 | throw e; | |
548 | } | |
549 | }); | |
550 | _65.addErrback(function(_67){ | |
551 | throw _67; | |
552 | }); | |
553 | }else{ | |
554 | if(this._jsonData){ | |
555 | _63._getItemsFromLoadedData(_63._jsonData); | |
556 | _63._jsonData=null; | |
557 | _63._loadFinished=true; | |
558 | } | |
559 | } | |
560 | }}); | |
561 | dojo.extend(dojo.data.ItemFileReadStore,dojo.data.util.simpleFetch); | |
562 | } |