source: Dev/trunk/src/client/dojox/app/utils/simpleModel.js @ 532

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

Added Dojo 1.9.3 release.

  • Property svn:executable set to *
File size: 3.8 KB
Line 
1define(["dojo/_base/lang", "dojo/Deferred", "dojo/when"],
2function(lang, Deferred, when){
3        return function(/*Object*/config, /*Object*/params, /*String*/item){
4                // summary:
5                //              simpleModel is called for each simple model, to create the simple model from the DataStore
6                //              based upon the store and query params.
7                //              It will also load models and return the either the loadedModels or a promise.
8                // description:
9                //              Called for each model with a modelLoader of "dojox/app/utils/simpleModel", it will
10                //              create the model based upon the store and query params set for the model in the config.
11                // config: Object
12                //              The models section of the config for this view or for the app.
13                // params: Object
14                //              The params set into the config for this model.
15                // item: String
16                //              The String with the name of this model
17                // returns: model
18                //               The model, of the store and query params specified in the config for this model.
19                var loadedModels = {};
20                var loadSimpleModelDeferred = new Deferred();
21
22                var fixupQuery = function(query){
23                        var ops = {};
24                        for(var item in query){ // need this to handle query params without errors
25                                if(item.charAt(0) !== "_"){
26                                        ops[item] = query[item];
27                                }
28                        }
29                        return(ops);
30                };
31
32                var options, dataStoreCtor;
33                if(params.store){
34                        if(!params.store.params){
35                                throw new Error("Invalid store for model ["+item+"]");
36                        }else if((params.store.params.data || params.store.params.store)){
37                                options = {
38                                        "store": params.store.store,
39                                        "query": params.query ? fixupQuery(params.query) : params.store.query ? fixupQuery(params.store.query) : {}
40                                };
41                        }else if(params.store.params.url){
42                                try{
43                                        dataStoreCtor = require("dojo/store/DataStore");
44                                }catch(e){
45                                        throw new Error("dojo/store/DataStore must be listed in the dependencies");
46                                }
47                                options = {
48                                        "store": new dataStoreCtor({
49                                                store: params.store.store
50                                        }),
51                                        "query": params.query ? fixupQuery(params.query) : params.store.query ? fixupQuery(params.store.query) : {}
52                                };
53                        } else if(params.store.store){
54                                //      if query is not set on the model params, it may be set on the store
55                                options = {
56                                        "store": params.store.store,
57                                        "query": params.query ? fixupQuery(params.query) : params.store.query ? fixupQuery(params.store.query) : {}
58                                };
59                        }
60                }else if(params.datastore){
61                        try{
62                                dataStoreCtor = require("dojo/store/DataStore");
63                        }catch(e){
64                                throw new Error("When using datastore the dojo/store/DataStore module must be listed in the dependencies");
65                        }
66                        options = {
67                                "store": new dataStoreCtor({
68                                        store: params.datastore.store
69                                }),
70                                "query": fixupQuery(params.query)
71                        };
72                }else if(params.data){
73                        if(params.data && lang.isString(params.data)){
74                                params.data = lang.getObject(params.data);
75                        }
76                        options = {"data": params.data, query: {}};
77                } else{
78                        console.warn("simpleModel: Missing parameters.");
79                }
80                var createSimplePromise;
81                try{
82                        if(options.store){
83                                createSimplePromise = options.store.query();
84                        }else{
85                                createSimplePromise = options.data;
86                        }
87                }catch(ex){
88                        loadSimpleModelDeferred.reject("load simple model error.");
89                        return loadSimpleModelDeferred.promise;
90                }
91                if(createSimplePromise.then){
92                        when(createSimplePromise, lang.hitch(this, function(newModel){
93                                // now the loadedModels[item].models is set.
94                                //console.log("in simpleModel promise path, loadedModels = ", loadedModels);
95                                loadedModels = newModel;
96                                loadSimpleModelDeferred.resolve(loadedModels);
97                                return loadedModels;
98                        }), function(){
99                                loadModelLoaderDeferred.reject("load model error.")
100                        });
101                }else{ // query did not return a promise, so use newModel
102                        loadedModels = createSimplePromise;
103                        //console.log("in simpleModel else path, loadedModels = ",loadedModels);
104                        loadSimpleModelDeferred.resolve(loadedModels);
105                        return loadedModels;
106                }
107                       
108                return loadSimpleModelDeferred;
109        }
110});
Note: See TracBrowser for help on using the repository browser.