source: Dev/trunk/src/client/dojox/grid/LazyTreeGridStoreModel.js @ 532

Last change on this file since 532 was 483, checked in by hendrikvanantwerpen, 11 years ago

Added Dojo 1.9.3 release.

File size: 3.2 KB
Line 
1define([
2        "dojo/_base/declare",
3        "dojo/_base/array",
4        "dojo/_base/lang",
5        "dijit/tree/ForestStoreModel"], function(declare, array, lang, ForestStoreModel){
6
7return declare("dojox.grid.LazyTreeGridStoreModel", ForestStoreModel, {
8
9        // There are different approaches to get children for client-side
10        // DataStore (e.g. dojo.data.ItemFileReadStore) or server-side DataStore
11        // (e.g. dojox.data.QueryReadStore), so we need to be sure what kind of
12        // DataStore is being used
13        serverStore: false, // server side store
14       
15        constructor: function(/* Object */ args){
16                this.serverStore = !!args.serverStore;
17        },
18
19        mayHaveChildren: function(/*dojo.data.Item*/ item){
20                var children = null;
21                return array.some(this.childrenAttrs, function(attr){
22                                children = this.store.getValue(item, attr);
23                                if(lang.isString(children)){
24                                        return parseInt(children, 10) > 0 || children.toLowerCase() === "true" ? true : false;
25                                }else if(typeof children == "number"){
26                                        return children > 0;
27                                }else if(typeof children == "boolean"){
28                                        return children;
29                                }else if(this.store.isItem(children)){
30                                        children = this.store.getValues(item, attr);
31                                        return lang.isArray(children) ? children.length > 0 : false;
32                                }else{
33                                        return false;
34                                }
35                }, this);
36        },
37       
38        getChildren: function(/*dojo.data.Item*/parentItem, /*function(items, size)*/onComplete, /*function*/ onError, /*object*/queryObj){
39                if(queryObj){
40                        var start = queryObj.start || 0,
41                                count = queryObj.count,
42                                parentId = queryObj.parentId,
43                                sort = queryObj.sort;
44                        if(parentItem === this.root){
45                                this.root.size = 0;
46                                this.store.fetch({
47                                        start: start,
48                                        count: count,
49                                        sort: sort,
50                                        query: this.query,
51                                        onBegin: lang.hitch(this, function(size){
52                                                this.root.size = size;
53                                        }),
54                                        onComplete: lang.hitch(this, function(items){
55                                                onComplete(items, queryObj, this.root.size);
56                                        }),
57                                        onError: onError
58                                });
59                        }else{
60                                var store = this.store;
61                                if(!store.isItemLoaded(parentItem)){
62                                        var getChildren = lang.hitch(this, arguments.callee);
63                                        store.loadItem({
64                                                item: parentItem,
65                                                onItem: function(parentItem){
66                                                        getChildren(parentItem, onComplete, onError, queryObj);
67                                                },
68                                                onError: onError
69                                        });
70                                        return;
71                                }
72                                if(this.serverStore && !this._isChildrenLoaded(parentItem)){
73                                        this.childrenSize = 0;
74                                        this.store.fetch({
75                                                start: start,
76                                                count: count,
77                                                sort: sort,
78                                                query: lang.mixin({parentId: parentId}, this.query || {}),
79                                                onBegin: lang.hitch(this, function(size){
80                                                        this.childrenSize = size;
81                                                }),
82                                                onComplete: lang.hitch(this, function(items){
83                                                        onComplete(items, queryObj, this.childrenSize);
84                                                }),
85                                                onError: onError
86                                        });
87                                }else{
88                                        this.inherited(arguments);
89                                }
90                        }
91                }else{
92                        this.inherited(arguments);
93                }
94        },
95       
96        _isChildrenLoaded: function(parentItem){
97                // summary:
98                //              Check if all children of the given item have been loaded
99                var children = null;
100                return array.every(this.childrenAttrs, function(attr){
101                        children = this.store.getValues(parentItem, attr);
102                        return array.every(children, function(c){
103                                return this.store.isItemLoaded(c);
104                        }, this);
105                }, this);
106        },
107       
108        //overwritten
109        onNewItem: function(item, parentInfo){ },
110       
111        onDeleteItem: function(item){ }
112});
113});
Note: See TracBrowser for help on using the repository browser.