12345678 |
- /*
- Copyright (c) 2004-2009, The Dojo Foundation All Rights Reserved.
- Available via Academic Free License >= 2.1 OR the modified BSD license.
- see: http://dojotoolkit.org/license for details
- */
- if(!dojo._hasResource["dojox.data.QueryReadStore"]){dojo._hasResource["dojox.data.QueryReadStore"]=true;dojo.provide("dojox.data.QueryReadStore");dojo.require("dojo.string");dojo.require("dojo.data.util.sorter");dojo.declare("dojox.data.QueryReadStore",null,{url:"",requestMethod:"get",_className:"dojox.data.QueryReadStore",_items:[],_lastServerQuery:null,_numRows:-1,lastRequestHash:null,doClientPaging:false,doClientSorting:false,_itemsByIdentity:null,_identifier:null,_features:{"dojo.data.api.Read":true,"dojo.data.api.Identity":true},_labelAttr:"label",constructor:function(_1){dojo.mixin(this,_1);},getValue:function(_2,_3,_4){this._assertIsItem(_2);if(!dojo.isString(_3)){throw new Error(this._className+".getValue(): Invalid attribute, string expected!");}if(!this.hasAttribute(_2,_3)){if(_4){return _4;}}return _2.i[_3];},getValues:function(_5,_6){this._assertIsItem(_5);var _7=[];if(this.hasAttribute(_5,_6)){_7.push(_5.i[_6]);}return _7;},getAttributes:function(_8){this._assertIsItem(_8);var _9=[];for(var i in _8.i){_9.push(i);}return _9;},hasAttribute:function(_a,_b){return this.isItem(_a)&&typeof _a.i[_b]!="undefined";},containsValue:function(_c,_d,_e){var _f=this.getValues(_c,_d);var len=_f.length;for(var i=0;i<len;i++){if(_f[i]==_e){return true;}}return false;},isItem:function(_10){if(_10){return typeof _10.r!="undefined"&&_10.r==this;}return false;},isItemLoaded:function(_11){return this.isItem(_11);},loadItem:function(_12){if(this.isItemLoaded(_12.item)){return;}},fetch:function(_13){_13=_13||{};if(!_13.store){_13.store=this;}var _14=this;var _15=function(_16,_17){if(_17.onError){var _18=_17.scope||dojo.global;_17.onError.call(_18,_16,_17);}};var _19=function(_1a,_1b,_1c){var _1d=_1b.abort||null;var _1e=false;var _1f=_1b.start?_1b.start:0;if(_14.doClientPaging==false){_1f=0;}var _20=_1b.count?(_1f+_1b.count):_1a.length;_1b.abort=function(){_1e=true;if(_1d){_1d.call(_1b);}};var _21=_1b.scope||dojo.global;if(!_1b.store){_1b.store=_14;}if(_1b.onBegin){_1b.onBegin.call(_21,_1c,_1b);}if(_1b.sort&&_14.doClientSorting){_1a.sort(dojo.data.util.sorter.createSortFunction(_1b.sort,_14));}if(_1b.onItem){for(var i=_1f;(i<_1a.length)&&(i<_20);++i){var _22=_1a[i];if(!_1e){_1b.onItem.call(_21,_22,_1b);}}}if(_1b.onComplete&&!_1e){var _23=null;if(!_1b.onItem){_23=_1a.slice(_1f,_20);}_1b.onComplete.call(_21,_23,_1b);}};this._fetchItems(_13,_19,_15);return _13;},getFeatures:function(){return this._features;},close:function(_24){},getLabel:function(_25){if(this._labelAttr&&this.isItem(_25)){return this.getValue(_25,this._labelAttr);}return undefined;},getLabelAttributes:function(_26){if(this._labelAttr){return [this._labelAttr];}return null;},_xhrFetchHandler:function(_27,_28,_29,_2a){_27=this._filterResponse(_27);if(_27.label){this._labelAttr=_27.label;}var _2b=_27.numRows||-1;this._items=[];dojo.forEach(_27.items,function(e){this._items.push({i:e,r:this});},this);var _2c=_27.identifier;this._itemsByIdentity={};if(_2c){this._identifier=_2c;var i;for(i=0;i<this._items.length;++i){var _2d=this._items[i].i;var _2e=_2d[_2c];if(!this._itemsByIdentity[_2e]){this._itemsByIdentity[_2e]=_2d;}else{throw new Error(this._className+": The json data as specified by: ["+this.url+"] is malformed. Items within the list have identifier: ["+_2c+"]. Value collided: ["+_2e+"]");}}}else{this._identifier=Number;for(i=0;i<this._items.length;++i){this._items[i].n=i;}}_2b=this._numRows=(_2b===-1)?this._items.length:_2b;_29(this._items,_28,_2b);this._numRows=_2b;},_fetchItems:function(_2f,_30,_31){var _32=_2f.serverQuery||_2f.query||{};if(!this.doClientPaging){_32.start=_2f.start||0;if(_2f.count){_32.count=_2f.count;}}if(!this.doClientSorting){if(_2f.sort){var _33=_2f.sort[0];if(_33&&_33.attribute){var _34=_33.attribute;if(_33.descending){_34="-"+_34;}_32.sort=_34;}}}if(this.doClientPaging&&this._lastServerQuery!==null&&dojo.toJson(_32)==dojo.toJson(this._lastServerQuery)){this._numRows=(this._numRows===-1)?this._items.length:this._numRows;_30(this._items,_2f,this._numRows);}else{var _35=this.requestMethod.toLowerCase()=="post"?dojo.xhrPost:dojo.xhrGet;var _36=_35({url:this.url,handleAs:"json-comment-optional",content:_32});_36.addCallback(dojo.hitch(this,function(_37){this._xhrFetchHandler(_37,_2f,_30,_31);}));_36.addErrback(function(_38){_31(_38,_2f);});this.lastRequestHash=new Date().getTime()+"-"+String(Math.random()).substring(2);this._lastServerQuery=dojo.mixin({},_32);}},_filterResponse:function(_39){return _39;},_assertIsItem:function(_3a){if(!this.isItem(_3a)){throw new Error(this._className+": Invalid item argument.");}},_assertIsAttribute:function(_3b){if(typeof _3b!=="string"){throw new Error(this._className+": Invalid attribute argument ('"+_3b+"').");}},fetchItemByIdentity:function(_3c){if(this._itemsByIdentity){var _3d=this._itemsByIdentity[_3c.identity];if(!(_3d===undefined)){if(_3c.onItem){var _3e=_3c.scope?_3c.scope:dojo.global;_3c.onItem.call(_3e,{i:_3d,r:this});}return;}}var _3f=function(_40,_41){var _42=_3c.scope?_3c.scope:dojo.global;if(_3c.onError){_3c.onError.call(_42,_40);}};var _43=function(_44,_45){var _46=_3c.scope?_3c.scope:dojo.global;try{var _47=null;if(_44&&_44.length==1){_47=_44[0];}if(_3c.onItem){_3c.onItem.call(_46,_47);}}catch(error){if(_3c.onError){_3c.onError.call(_46,error);}}};var _48={serverQuery:{id:_3c.identity}};this._fetchItems(_48,_43,_3f);},getIdentity:function(_49){var _4a=null;if(this._identifier===Number){_4a=_49.n;}else{_4a=_49.i[this._identifier];}return _4a;},getIdentityAttributes:function(_4b){return [this._identifier];}});}
|