root / trunk / web / dojo / dojox / data / AndOrReadStore.js @ 9
History | View | Annotate | Download (15 KB)
1 | 9 | andrej.cim | /*
|
---|---|---|---|
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["dojox.data.AndOrReadStore"]){ |
||
9 | dojo._hasResource["dojox.data.AndOrReadStore"]=true; |
||
10 | dojo.provide("dojox.data.AndOrReadStore");
|
||
11 | dojo.require("dojo.data.util.filter");
|
||
12 | dojo.require("dojo.data.util.simpleFetch");
|
||
13 | dojo.require("dojo.date.stamp");
|
||
14 | dojo.declare("dojox.data.AndOrReadStore",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 | },url:"",_ccUrl:"",data:null,typeMap:null,clearOnClose:false,urlPreventCache:false,hierarchical:true,_assertIsItem:function(_3){ |
||
47 | if(!this.isItem(_3)){ |
||
48 | throw new Error("dojox.data.AndOrReadStore: Invalid item argument."); |
||
49 | } |
||
50 | },_assertIsAttribute:function(_4){ |
||
51 | if(typeof _4!=="string"){ |
||
52 | throw new Error("dojox.data.AndOrReadStore: Invalid attribute argument."); |
||
53 | } |
||
54 | },getValue:function(_5,_6,_7){ |
||
55 | var _8=this.getValues(_5,_6); |
||
56 | return (_8.length>0)?_8[0]:_7; |
||
57 | },getValues:function(_9,_a){ |
||
58 | this._assertIsItem(_9);
|
||
59 | this._assertIsAttribute(_a);
|
||
60 | var _b=_9[_a]||[];
|
||
61 | return _b.slice(0,_b.length); |
||
62 | },getAttributes:function(_c){ |
||
63 | this._assertIsItem(_c);
|
||
64 | var _d=[];
|
||
65 | for(var _e in _c){ |
||
66 | if((_e!==this._storeRefPropName)&&(_e!==this._itemNumPropName)&&(_e!==this._rootItemPropName)&&(_e!==this._reverseRefMap)){ |
||
67 | _d.push(_e); |
||
68 | } |
||
69 | } |
||
70 | return _d;
|
||
71 | },hasAttribute:function(_f,_10){ |
||
72 | this._assertIsItem(_f);
|
||
73 | this._assertIsAttribute(_10);
|
||
74 | return (_10 in _f); |
||
75 | },containsValue:function(_11,_12,_13){ |
||
76 | var _14=undefined; |
||
77 | if(typeof _13==="string"){ |
||
78 | _14=dojo.data.util.filter.patternToRegExp(_13,false);
|
||
79 | } |
||
80 | return this._containsValue(_11,_12,_13,_14); |
||
81 | },_containsValue:function(_15,_16,_17,_18){ |
||
82 | return dojo.some(this.getValues(_15,_16),function(_19){ |
||
83 | if(_19!==null&&!dojo.isObject(_19)&&_18){ |
||
84 | if(_19.toString().match(_18)){
|
||
85 | return true; |
||
86 | } |
||
87 | }else{
|
||
88 | if(_17===_19){
|
||
89 | return true; |
||
90 | } |
||
91 | } |
||
92 | }); |
||
93 | },isItem:function(_1a){ |
||
94 | if(_1a&&_1a[this._storeRefPropName]===this){ |
||
95 | if(this._arrayOfAllItems[_1a[this._itemNumPropName]]===_1a){ |
||
96 | return true; |
||
97 | } |
||
98 | } |
||
99 | return false; |
||
100 | },isItemLoaded:function(_1b){ |
||
101 | return this.isItem(_1b); |
||
102 | },loadItem:function(_1c){ |
||
103 | this._assertIsItem(_1c.item);
|
||
104 | },getFeatures:function(){ |
||
105 | return this._features; |
||
106 | },getLabel:function(_1d){ |
||
107 | if(this._labelAttr&&this.isItem(_1d)){ |
||
108 | return this.getValue(_1d,this._labelAttr); |
||
109 | } |
||
110 | return undefined; |
||
111 | },getLabelAttributes:function(_1e){ |
||
112 | if(this._labelAttr){ |
||
113 | return [this._labelAttr]; |
||
114 | } |
||
115 | return null; |
||
116 | },_fetchItems:function(_1f,_20,_21){ |
||
117 | var _22=this; |
||
118 | var _23=function(_24,_25){ |
||
119 | var _26=[];
|
||
120 | if(_24.query){
|
||
121 | var _27=dojo.fromJson(dojo.toJson(_24.query));
|
||
122 | if(typeof _27=="object"){ |
||
123 | var _28=0; |
||
124 | var p;
|
||
125 | for(p in _27){ |
||
126 | _28++; |
||
127 | } |
||
128 | if(_28>1&&_27.complexQuery){ |
||
129 | var cq=_27.complexQuery;
|
||
130 | var _29=false; |
||
131 | for(p in _27){ |
||
132 | if(p!=="complexQuery"){ |
||
133 | if(!_29){
|
||
134 | cq="( "+cq+" )"; |
||
135 | _29=true;
|
||
136 | } |
||
137 | var v=_24.query[p];
|
||
138 | if(dojo.isString(v)){
|
||
139 | v="'"+v+"'"; |
||
140 | } |
||
141 | cq+=" AND "+p+":"+v; |
||
142 | delete _27[p];
|
||
143 | } |
||
144 | } |
||
145 | _27.complexQuery=cq; |
||
146 | } |
||
147 | } |
||
148 | var _2a=_24.queryOptions?_24.queryOptions.ignoreCase:false; |
||
149 | if(typeof _27!="string"){ |
||
150 | _27=dojo.toJson(_27); |
||
151 | _27=_27.replace(/\\\\/g,"\\"); |
||
152 | } |
||
153 | _27=_27.replace(/\\"/g,"\""); |
||
154 | var _2b=dojo.trim(_27.replace(/{|}/g,"")); |
||
155 | var _2c,i;
|
||
156 | if(_2b.match(/"? *complexQuery *"?:/)){ |
||
157 | _2b=dojo.trim(_2b.replace(/"?\s*complexQuery\s*"?:/,"")); |
||
158 | var _2d=["'","\""]; |
||
159 | var _2e,_2f;
|
||
160 | var _30=false; |
||
161 | for(i=0;i<_2d.length;i++){ |
||
162 | _2e=_2b.indexOf(_2d[i]); |
||
163 | _2c=_2b.indexOf(_2d[i],1);
|
||
164 | _2f=_2b.indexOf(":",1); |
||
165 | if(_2e===0&&_2c!=-1&&_2f<_2c){ |
||
166 | _30=true;
|
||
167 | break;
|
||
168 | } |
||
169 | } |
||
170 | if(_30){
|
||
171 | _2b=_2b.replace(/^\"|^\'|\"$|\'$/g,""); |
||
172 | } |
||
173 | } |
||
174 | var _31=_2b;
|
||
175 | var _32=/^,|^NOT |^AND |^OR |^\(|^\)|^!|^&&|^\|\|/i; |
||
176 | var _33=""; |
||
177 | var op=""; |
||
178 | var val=""; |
||
179 | var pos=-1; |
||
180 | var err=false; |
||
181 | var key=""; |
||
182 | var _34=""; |
||
183 | var tok=""; |
||
184 | _2c=-1;
|
||
185 | for(i=0;i<_25.length;++i){ |
||
186 | var _35=true; |
||
187 | var _36=_25[i];
|
||
188 | if(_36===null){ |
||
189 | _35=false;
|
||
190 | }else{
|
||
191 | _2b=_31; |
||
192 | _33="";
|
||
193 | while(_2b.length>0&&!err){ |
||
194 | op=_2b.match(_32); |
||
195 | while(op&&!err){
|
||
196 | _2b=dojo.trim(_2b.replace(op[0],"")); |
||
197 | op=dojo.trim(op[0]).toUpperCase();
|
||
198 | op=op=="NOT"?"!":op=="AND"||op==","?"&&":op=="OR"?"||":op; |
||
199 | op=" "+op+" "; |
||
200 | _33+=op; |
||
201 | op=_2b.match(_32); |
||
202 | } |
||
203 | if(_2b.length>0){ |
||
204 | pos=_2b.indexOf(":");
|
||
205 | if(pos==-1){ |
||
206 | err=true;
|
||
207 | break;
|
||
208 | }else{
|
||
209 | key=dojo.trim(_2b.substring(0,pos).replace(/\"|\'/g,"")); |
||
210 | _2b=dojo.trim(_2b.substring(pos+1));
|
||
211 | tok=_2b.match(/^\'|^\"/);
|
||
212 | if(tok){
|
||
213 | tok=tok[0];
|
||
214 | pos=_2b.indexOf(tok); |
||
215 | _2c=_2b.indexOf(tok,pos+1);
|
||
216 | if(_2c==-1){ |
||
217 | err=true;
|
||
218 | break;
|
||
219 | } |
||
220 | _34=_2b.substring(pos+1,_2c);
|
||
221 | if(_2c==_2b.length-1){ |
||
222 | _2b="";
|
||
223 | }else{
|
||
224 | _2b=dojo.trim(_2b.substring(_2c+1));
|
||
225 | } |
||
226 | _33+=_22._containsValue(_36,key,_34,dojo.data.util.filter.patternToRegExp(_34,_2a)); |
||
227 | }else{
|
||
228 | tok=_2b.match(/\s|\)|,/);
|
||
229 | if(tok){
|
||
230 | var _37=new Array(tok.length); |
||
231 | for(var j=0;j<tok.length;j++){ |
||
232 | _37[j]=_2b.indexOf(tok[j]); |
||
233 | } |
||
234 | pos=_37[0];
|
||
235 | if(_37.length>1){ |
||
236 | for(var j=1;j<_37.length;j++){ |
||
237 | pos=Math.min(pos,_37[j]); |
||
238 | } |
||
239 | } |
||
240 | _34=dojo.trim(_2b.substring(0,pos));
|
||
241 | _2b=dojo.trim(_2b.substring(pos)); |
||
242 | }else{
|
||
243 | _34=dojo.trim(_2b); |
||
244 | _2b="";
|
||
245 | } |
||
246 | _33+=_22._containsValue(_36,key,_34,dojo.data.util.filter.patternToRegExp(_34,_2a)); |
||
247 | } |
||
248 | } |
||
249 | } |
||
250 | } |
||
251 | _35=eval(_33); |
||
252 | } |
||
253 | if(_35){
|
||
254 | _26.push(_36); |
||
255 | } |
||
256 | } |
||
257 | if(err){
|
||
258 | _26=[]; |
||
259 | } |
||
260 | _20(_26,_24); |
||
261 | }else{
|
||
262 | for(var i=0;i<_25.length;++i){ |
||
263 | var _38=_25[i];
|
||
264 | if(_38!==null){ |
||
265 | _26.push(_38); |
||
266 | } |
||
267 | } |
||
268 | _20(_26,_24); |
||
269 | } |
||
270 | }; |
||
271 | if(this._loadFinished){ |
||
272 | _23(_1f,this._getItemsArray(_1f.queryOptions));
|
||
273 | }else{
|
||
274 | if(this._jsonFileUrl!==this._ccUrl){ |
||
275 | dojo.deprecated("dojox.data.AndOrReadStore: ","To change the url, set the url property of the store,"+" not _jsonFileUrl. _jsonFileUrl support will be removed in 2.0"); |
||
276 | this._ccUrl=this._jsonFileUrl; |
||
277 | this.url=this._jsonFileUrl; |
||
278 | }else{
|
||
279 | if(this.url!==this._ccUrl){ |
||
280 | this._jsonFileUrl=this.url; |
||
281 | this._ccUrl=this.url; |
||
282 | } |
||
283 | } |
||
284 | if(this.data!=null&&this._jsonData==null){ |
||
285 | this._jsonData=this.data; |
||
286 | this.data=null; |
||
287 | } |
||
288 | if(this._jsonFileUrl){ |
||
289 | if(this._loadInProgress){ |
||
290 | this._queuedFetches.push({args:_1f,filter:_23}); |
||
291 | }else{
|
||
292 | this._loadInProgress=true; |
||
293 | var _39={url:_22._jsonFileUrl,handleAs:"json-comment-optional",preventCache:this.urlPreventCache}; |
||
294 | var _3a=dojo.xhrGet(_39);
|
||
295 | _3a.addCallback(function(_3b){
|
||
296 | try{
|
||
297 | _22._getItemsFromLoadedData(_3b); |
||
298 | _22._loadFinished=true;
|
||
299 | _22._loadInProgress=false;
|
||
300 | _23(_1f,_22._getItemsArray(_1f.queryOptions)); |
||
301 | _22._handleQueuedFetches(); |
||
302 | } |
||
303 | catch(e){
|
||
304 | _22._loadFinished=true;
|
||
305 | _22._loadInProgress=false;
|
||
306 | _21(e,_1f); |
||
307 | } |
||
308 | }); |
||
309 | _3a.addErrback(function(_3c){
|
||
310 | _22._loadInProgress=false;
|
||
311 | _21(_3c,_1f); |
||
312 | }); |
||
313 | var _3d=null; |
||
314 | if(_1f.abort){
|
||
315 | _3d=_1f.abort; |
||
316 | } |
||
317 | _1f.abort=function(){ |
||
318 | var df=_3a;
|
||
319 | if(df&&df.fired===-1){ |
||
320 | df.cancel(); |
||
321 | df=null;
|
||
322 | } |
||
323 | if(_3d){
|
||
324 | _3d.call(_1f); |
||
325 | } |
||
326 | }; |
||
327 | } |
||
328 | }else{
|
||
329 | if(this._jsonData){ |
||
330 | try{
|
||
331 | this._loadFinished=true; |
||
332 | this._getItemsFromLoadedData(this._jsonData); |
||
333 | this._jsonData=null; |
||
334 | _23(_1f,this._getItemsArray(_1f.queryOptions));
|
||
335 | } |
||
336 | catch(e){
|
||
337 | _21(e,_1f); |
||
338 | } |
||
339 | }else{
|
||
340 | _21(new Error("dojox.data.AndOrReadStore: No JSON source data was provided as either URL or a nested Javascript object."),_1f); |
||
341 | } |
||
342 | } |
||
343 | } |
||
344 | },_handleQueuedFetches:function(){ |
||
345 | if(this._queuedFetches.length>0){ |
||
346 | for(var i=0;i<this._queuedFetches.length;i++){ |
||
347 | var _3e=this._queuedFetches[i]; |
||
348 | var _3f=_3e.args;
|
||
349 | var _40=_3e.filter;
|
||
350 | if(_40){
|
||
351 | _40(_3f,this._getItemsArray(_3f.queryOptions));
|
||
352 | }else{
|
||
353 | this.fetchItemByIdentity(_3f);
|
||
354 | } |
||
355 | } |
||
356 | this._queuedFetches=[];
|
||
357 | } |
||
358 | },_getItemsArray:function(_41){ |
||
359 | if(_41&&_41.deep){
|
||
360 | return this._arrayOfAllItems; |
||
361 | } |
||
362 | return this._arrayOfTopLevelItems; |
||
363 | },close:function(_42){ |
||
364 | if(this.clearOnClose&&this._loadFinished&&!this._loadInProgress){ |
||
365 | if(((this._jsonFileUrl==""||this._jsonFileUrl==null)&&(this.url==""||this.url==null))&&this.data==null){ |
||
366 | } |
||
367 | this._arrayOfAllItems=[];
|
||
368 | this._arrayOfTopLevelItems=[];
|
||
369 | this._loadFinished=false; |
||
370 | this._itemsByIdentity=null; |
||
371 | this._loadInProgress=false; |
||
372 | this._queuedFetches=[];
|
||
373 | } |
||
374 | },_getItemsFromLoadedData:function(_43){ |
||
375 | var _44=this; |
||
376 | function _45(_46){ |
||
377 | var _47=((_46!==null)&&(typeof _46==="object")&&(!dojo.isArray(_46))&&(!dojo.isFunction(_46))&&(_46.constructor==Object)&&(typeof _46._reference==="undefined")&&(typeof _46._type==="undefined")&&(typeof _46._value==="undefined")&&_44.hierarchical); |
||
378 | return _47;
|
||
379 | }; |
||
380 | function _48(_49){ |
||
381 | _44._arrayOfAllItems.push(_49); |
||
382 | for(var _4a in _49){ |
||
383 | var _4b=_49[_4a];
|
||
384 | if(_4b){
|
||
385 | if(dojo.isArray(_4b)){
|
||
386 | var _4c=_4b;
|
||
387 | for(var k=0;k<_4c.length;++k){ |
||
388 | var _4d=_4c[k];
|
||
389 | if(_45(_4d)){
|
||
390 | _48(_4d); |
||
391 | } |
||
392 | } |
||
393 | }else{
|
||
394 | if(_45(_4b)){
|
||
395 | _48(_4b); |
||
396 | } |
||
397 | } |
||
398 | } |
||
399 | } |
||
400 | }; |
||
401 | this._labelAttr=_43.label;
|
||
402 | var i;
|
||
403 | var _4e;
|
||
404 | this._arrayOfAllItems=[];
|
||
405 | this._arrayOfTopLevelItems=_43.items;
|
||
406 | for(i=0;i<this._arrayOfTopLevelItems.length;++i){ |
||
407 | _4e=this._arrayOfTopLevelItems[i];
|
||
408 | _48(_4e); |
||
409 | _4e[this._rootItemPropName]=true; |
||
410 | } |
||
411 | var _4f={};
|
||
412 | var key;
|
||
413 | for(i=0;i<this._arrayOfAllItems.length;++i){ |
||
414 | _4e=this._arrayOfAllItems[i];
|
||
415 | for(key in _4e){ |
||
416 | if(key!==this._rootItemPropName){ |
||
417 | var _50=_4e[key];
|
||
418 | if(_50!==null){ |
||
419 | if(!dojo.isArray(_50)){
|
||
420 | _4e[key]=[_50]; |
||
421 | } |
||
422 | }else{
|
||
423 | _4e[key]=[null];
|
||
424 | } |
||
425 | } |
||
426 | _4f[key]=key; |
||
427 | } |
||
428 | } |
||
429 | while(_4f[this._storeRefPropName]){ |
||
430 | this._storeRefPropName+="_"; |
||
431 | } |
||
432 | while(_4f[this._itemNumPropName]){ |
||
433 | this._itemNumPropName+="_"; |
||
434 | } |
||
435 | while(_4f[this._reverseRefMap]){ |
||
436 | this._reverseRefMap+="_"; |
||
437 | } |
||
438 | var _51;
|
||
439 | var _52=_43.identifier;
|
||
440 | if(_52){
|
||
441 | this._itemsByIdentity={};
|
||
442 | this._features["dojo.data.api.Identity"]=_52; |
||
443 | for(i=0;i<this._arrayOfAllItems.length;++i){ |
||
444 | _4e=this._arrayOfAllItems[i];
|
||
445 | _51=_4e[_52]; |
||
446 | var _53=_51[0]; |
||
447 | if(!this._itemsByIdentity[_53]){ |
||
448 | this._itemsByIdentity[_53]=_4e;
|
||
449 | }else{
|
||
450 | if(this._jsonFileUrl){ |
||
451 | throw new Error("dojox.data.AndOrReadStore: The json data as specified by: ["+this._jsonFileUrl+"] is malformed. Items within the list have identifier: ["+_52+"]. Value collided: ["+_53+"]"); |
||
452 | }else{
|
||
453 | if(this._jsonData){ |
||
454 | throw new Error("dojox.data.AndOrReadStore: The json data provided by the creation arguments is malformed. Items within the list have identifier: ["+_52+"]. Value collided: ["+_53+"]"); |
||
455 | } |
||
456 | } |
||
457 | } |
||
458 | } |
||
459 | }else{
|
||
460 | this._features["dojo.data.api.Identity"]=Number; |
||
461 | } |
||
462 | for(i=0;i<this._arrayOfAllItems.length;++i){ |
||
463 | _4e=this._arrayOfAllItems[i];
|
||
464 | _4e[this._storeRefPropName]=this; |
||
465 | _4e[this._itemNumPropName]=i;
|
||
466 | } |
||
467 | for(i=0;i<this._arrayOfAllItems.length;++i){ |
||
468 | _4e=this._arrayOfAllItems[i];
|
||
469 | for(key in _4e){ |
||
470 | _51=_4e[key]; |
||
471 | for(var j=0;j<_51.length;++j){ |
||
472 | _50=_51[j]; |
||
473 | if(_50!==null&&typeof _50=="object"){ |
||
474 | if(("_type" in _50)&&("_value" in _50)){ |
||
475 | var _54=_50._type;
|
||
476 | var _55=this._datatypeMap[_54]; |
||
477 | if(!_55){
|
||
478 | throw new Error("dojox.data.AndOrReadStore: in the typeMap constructor arg, no object class was specified for the datatype '"+_54+"'"); |
||
479 | }else{
|
||
480 | if(dojo.isFunction(_55)){
|
||
481 | _51[j]=new _55(_50._value);
|
||
482 | }else{
|
||
483 | if(dojo.isFunction(_55.deserialize)){
|
||
484 | _51[j]=_55.deserialize(_50._value); |
||
485 | }else{
|
||
486 | throw new Error("dojox.data.AndOrReadStore: Value provided in typeMap was neither a constructor, nor a an object with a deserialize function"); |
||
487 | } |
||
488 | } |
||
489 | } |
||
490 | } |
||
491 | if(_50._reference){
|
||
492 | var _56=_50._reference;
|
||
493 | if(!dojo.isObject(_56)){
|
||
494 | _51[j]=this._getItemByIdentity(_56);
|
||
495 | }else{
|
||
496 | for(var k=0;k<this._arrayOfAllItems.length;++k){ |
||
497 | var _57=this._arrayOfAllItems[k]; |
||
498 | var _58=true; |
||
499 | for(var _59 in _56){ |
||
500 | if(_57[_59]!=_56[_59]){
|
||
501 | _58=false;
|
||
502 | } |
||
503 | } |
||
504 | if(_58){
|
||
505 | _51[j]=_57; |
||
506 | } |
||
507 | } |
||
508 | } |
||
509 | if(this.referenceIntegrity){ |
||
510 | var _5a=_51[j];
|
||
511 | if(this.isItem(_5a)){ |
||
512 | this._addReferenceToMap(_5a,_4e,key);
|
||
513 | } |
||
514 | } |
||
515 | }else{
|
||
516 | if(this.isItem(_50)){ |
||
517 | if(this.referenceIntegrity){ |
||
518 | this._addReferenceToMap(_50,_4e,key);
|
||
519 | } |
||
520 | } |
||
521 | } |
||
522 | } |
||
523 | } |
||
524 | } |
||
525 | } |
||
526 | },_addReferenceToMap:function(_5b,_5c,_5d){ |
||
527 | },getIdentity:function(_5e){ |
||
528 | var _5f=this._features["dojo.data.api.Identity"]; |
||
529 | if(_5f===Number){
|
||
530 | return _5e[this._itemNumPropName]; |
||
531 | }else{
|
||
532 | var _60=_5e[_5f];
|
||
533 | if(_60){
|
||
534 | return _60[0]; |
||
535 | } |
||
536 | } |
||
537 | return null; |
||
538 | },fetchItemByIdentity:function(_61){ |
||
539 | if(!this._loadFinished){ |
||
540 | var _62=this; |
||
541 | if(this._jsonFileUrl!==this._ccUrl){ |
||
542 | dojo.deprecated("dojox.data.AndOrReadStore: ","To change the url, set the url property of the store,"+" not _jsonFileUrl. _jsonFileUrl support will be removed in 2.0"); |
||
543 | this._ccUrl=this._jsonFileUrl; |
||
544 | this.url=this._jsonFileUrl; |
||
545 | }else{
|
||
546 | if(this.url!==this._ccUrl){ |
||
547 | this._jsonFileUrl=this.url; |
||
548 | this._ccUrl=this.url; |
||
549 | } |
||
550 | } |
||
551 | if(this.data!=null&&this._jsonData==null){ |
||
552 | this._jsonData=this.data; |
||
553 | this.data=null; |
||
554 | } |
||
555 | if(this._jsonFileUrl){ |
||
556 | if(this._loadInProgress){ |
||
557 | this._queuedFetches.push({args:_61}); |
||
558 | }else{
|
||
559 | this._loadInProgress=true; |
||
560 | var _63={url:_62._jsonFileUrl,handleAs:"json-comment-optional",preventCache:this.urlPreventCache}; |
||
561 | var _64=dojo.xhrGet(_63);
|
||
562 | _64.addCallback(function(_65){
|
||
563 | var _66=_61.scope?_61.scope:dojo.global;
|
||
564 | try{
|
||
565 | _62._getItemsFromLoadedData(_65); |
||
566 | _62._loadFinished=true;
|
||
567 | _62._loadInProgress=false;
|
||
568 | var _67=_62._getItemByIdentity(_61.identity);
|
||
569 | if(_61.onItem){
|
||
570 | _61.onItem.call(_66,_67); |
||
571 | } |
||
572 | _62._handleQueuedFetches(); |
||
573 | } |
||
574 | catch(error){
|
||
575 | _62._loadInProgress=false;
|
||
576 | if(_61.onError){
|
||
577 | _61.onError.call(_66,error); |
||
578 | } |
||
579 | } |
||
580 | }); |
||
581 | _64.addErrback(function(_68){
|
||
582 | _62._loadInProgress=false;
|
||
583 | if(_61.onError){
|
||
584 | var _69=_61.scope?_61.scope:dojo.global;
|
||
585 | _61.onError.call(_69,_68); |
||
586 | } |
||
587 | }); |
||
588 | } |
||
589 | }else{
|
||
590 | if(this._jsonData){ |
||
591 | _62._getItemsFromLoadedData(_62._jsonData); |
||
592 | _62._jsonData=null;
|
||
593 | _62._loadFinished=true;
|
||
594 | var _6a=_62._getItemByIdentity(_61.identity);
|
||
595 | if(_61.onItem){
|
||
596 | var _6b=_61.scope?_61.scope:dojo.global;
|
||
597 | _61.onItem.call(_6b,_6a); |
||
598 | } |
||
599 | } |
||
600 | } |
||
601 | }else{
|
||
602 | var _6a=this._getItemByIdentity(_61.identity); |
||
603 | if(_61.onItem){
|
||
604 | var _6b=_61.scope?_61.scope:dojo.global;
|
||
605 | _61.onItem.call(_6b,_6a); |
||
606 | } |
||
607 | } |
||
608 | },_getItemByIdentity:function(_6c){ |
||
609 | var _6d=null; |
||
610 | if(this._itemsByIdentity){ |
||
611 | _6d=this._itemsByIdentity[_6c];
|
||
612 | }else{
|
||
613 | _6d=this._arrayOfAllItems[_6c];
|
||
614 | } |
||
615 | if(_6d===undefined){ |
||
616 | _6d=null;
|
||
617 | } |
||
618 | return _6d;
|
||
619 | },getIdentityAttributes:function(_6e){ |
||
620 | var _6f=this._features["dojo.data.api.Identity"]; |
||
621 | if(_6f===Number){
|
||
622 | return null; |
||
623 | }else{
|
||
624 | return [_6f];
|
||
625 | } |
||
626 | },_forceLoad:function(){ |
||
627 | var _70=this; |
||
628 | if(this._jsonFileUrl!==this._ccUrl){ |
||
629 | dojo.deprecated("dojox.data.AndOrReadStore: ","To change the url, set the url property of the store,"+" not _jsonFileUrl. _jsonFileUrl support will be removed in 2.0"); |
||
630 | this._ccUrl=this._jsonFileUrl; |
||
631 | this.url=this._jsonFileUrl; |
||
632 | }else{
|
||
633 | if(this.url!==this._ccUrl){ |
||
634 | this._jsonFileUrl=this.url; |
||
635 | this._ccUrl=this.url; |
||
636 | } |
||
637 | } |
||
638 | if(this.data!=null&&this._jsonData==null){ |
||
639 | this._jsonData=this.data; |
||
640 | this.data=null; |
||
641 | } |
||
642 | if(this._jsonFileUrl){ |
||
643 | var _71={url:_70._jsonFileUrl,handleAs:"json-comment-optional",preventCache:this.urlPreventCache,sync:true}; |
||
644 | var _72=dojo.xhrGet(_71);
|
||
645 | _72.addCallback(function(_73){
|
||
646 | try{
|
||
647 | if(_70._loadInProgress!==true&&!_70._loadFinished){ |
||
648 | _70._getItemsFromLoadedData(_73); |
||
649 | _70._loadFinished=true;
|
||
650 | }else{
|
||
651 | if(_70._loadInProgress){
|
||
652 | throw new Error("dojox.data.AndOrReadStore: Unable to perform a synchronous load, an async load is in progress."); |
||
653 | } |
||
654 | } |
||
655 | } |
||
656 | catch(e){
|
||
657 | throw e;
|
||
658 | } |
||
659 | }); |
||
660 | _72.addErrback(function(_74){
|
||
661 | throw _74;
|
||
662 | }); |
||
663 | }else{
|
||
664 | if(this._jsonData){ |
||
665 | _70._getItemsFromLoadedData(_70._jsonData); |
||
666 | _70._jsonData=null;
|
||
667 | _70._loadFinished=true;
|
||
668 | } |
||
669 | } |
||
670 | }}); |
||
671 | dojo.extend(dojox.data.AndOrReadStore,dojo.data.util.simpleFetch); |
||
672 | } |