summaryrefslogtreecommitdiff
path: root/js/dojo-1.7.2/dojox/grid/LazyTreeGridStoreModel.js
diff options
context:
space:
mode:
Diffstat (limited to 'js/dojo-1.7.2/dojox/grid/LazyTreeGridStoreModel.js')
-rw-r--r--js/dojo-1.7.2/dojox/grid/LazyTreeGridStoreModel.js114
1 files changed, 114 insertions, 0 deletions
diff --git a/js/dojo-1.7.2/dojox/grid/LazyTreeGridStoreModel.js b/js/dojo-1.7.2/dojox/grid/LazyTreeGridStoreModel.js
new file mode 100644
index 0000000..340fbe3
--- /dev/null
+++ b/js/dojo-1.7.2/dojox/grid/LazyTreeGridStoreModel.js
@@ -0,0 +1,114 @@
+//>>built
+define("dojox/grid/LazyTreeGridStoreModel", [
+ "dojo/_base/declare",
+ "dojo/_base/array",
+ "dojo/_base/lang",
+ "dijit/tree/ForestStoreModel"], function(declare, array, lang, ForestStoreModel){
+
+return declare("dojox.grid.LazyTreeGridStoreModel", ForestStoreModel, {
+
+ // There are different approaches to get children for client-side
+ // DataStore (e.g. dojo.data.ItemFileReadStore) or server-side DataStore
+ // (e.g. dojox.data.QueryReadStore), so we need to be sure what kind of
+ // DataStore is being used
+ serverStore: false, // server side store
+
+ constructor: function(/* Object */ args){
+ this.serverStore = !!args.serverStore;
+ },
+
+ mayHaveChildren: function(/*dojo.data.Item*/ item){
+ var children = null;
+ return array.some(this.childrenAttrs, function(attr){
+ children = this.store.getValue(item, attr);
+ if(lang.isString(children)){
+ return parseInt(children, 10) > 0 || children.toLowerCase() === "true" ? true : false;
+ }else if(typeof children == "number"){
+ return children > 0;
+ }else if(typeof children == "boolean"){
+ return children;
+ }else if(this.store.isItem(children)){
+ children = this.store.getValues(item, attr);
+ return lang.isArray(children) ? children.length > 0 : false;
+ }else{
+ return false;
+ }
+ }, this);
+ },
+
+ getChildren: function(/*dojo.data.Item*/parentItem, /*function(items, size)*/onComplete, /*function*/ onError, /*object*/queryObj){
+ if(queryObj){
+ var start = queryObj.start || 0,
+ count = queryObj.count,
+ parentId = queryObj.parentId,
+ sort = queryObj.sort;
+ if(parentItem === this.root){
+ this.root.size = 0;
+ this.store.fetch({
+ start: start,
+ count: count,
+ sort: sort,
+ query: this.query,
+ onBegin: lang.hitch(this, function(size){
+ this.root.size = size;
+ }),
+ onComplete: lang.hitch(this, function(items){
+ onComplete(items, queryObj, this.root.size);
+ }),
+ onError: onError
+ });
+ }else{
+ var store = this.store;
+ if(!store.isItemLoaded(parentItem)){
+ var getChildren = lang.hitch(this, arguments.callee);
+ store.loadItem({
+ item: parentItem,
+ onItem: function(parentItem){
+ getChildren(parentItem, onComplete, onError, queryObj);
+ },
+ onError: onError
+ });
+ return;
+ }
+ if(this.serverStore && !this._isChildrenLoaded(parentItem)){
+ this.childrenSize = 0;
+ this.store.fetch({
+ start: start,
+ count: count,
+ sort: sort,
+ query: lang.mixin({parentId: parentId}, this.query || {}),
+ onBegin: lang.hitch(this, function(size){
+ this.childrenSize = size;
+ }),
+ onComplete: lang.hitch(this, function(items){
+ onComplete(items, queryObj, this.childrenSize);
+ }),
+ onError: onError
+ });
+ }else{
+ this.inherited(arguments);
+ }
+ }
+ }else{
+ this.inherited(arguments);
+ }
+ },
+
+ _isChildrenLoaded: function(parentItem){
+ // summary:
+ // Check if all children of the given item have been loaded
+ var children = null;
+ return array.every(this.childrenAttrs, function(attr){
+ children = this.store.getValues(parentItem, attr);
+ return array.every(children, function(c){
+ return this.store.isItemLoaded(c);
+ }, this);
+ }, this);
+ },
+
+ //overwritten
+ onNewItem: function(item, parentInfo){ },
+
+ onDeleteItem: function(item){ }
+});
+});