source: Dev/trunk/src/client/dojox/app/utils/model.js

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

Added Dojo 1.9.3 release.

  • Property svn:executable set to *
File size: 2.5 KB
Line 
1define(["dojo/_base/lang", "dojo/Deferred", "dojo/promise/all", "dojo/when"], function(lang, Deferred, all, when){
2        return function(/*Object*/ config, /*Object*/ parent, /*Object*/ app){
3                // summary:
4                //              model is called to create all of the models for the app, and all models for a view, it will
5                //              create and call the appropriate model utility based upon the modelLoader set in the model in the config
6                // description:
7                //              Called for each view or for the app.  For each model in the config, it will 
8                //              create the model utility based upon the modelLoader and call it to create and load the model.
9                // config: Object
10                //              The models section of the config for this view or for the app.
11                // parent: Object
12                //              The parent of this view or the app itself, so that models from the parent will be
13                //              available to the view.
14                // returns: loadedModels
15                //               loadedModels is an object holding all of the available loaded models for this view.
16                var loadedModels = {};
17                if(parent.loadedModels){
18                        lang.mixin(loadedModels, parent.loadedModels);
19                }
20                if(config){
21                        var allDeferred = [];
22                        for(var item in config){
23                                if(item.charAt(0) !== "_"){
24                                        allDeferred.push(setupModel(config, item, app, loadedModels));
25                                }
26                        }
27                        return (allDeferred.length == 0) ? loadedModels : all(allDeferred);
28                }else{
29                        return loadedModels;
30                }
31        };
32
33        function setupModel(config, item, app, loadedModels){
34                // Here we need to create the modelLoader and call it passing in the item and the config[item].params
35                var params = config[item].params ? config[item].params : {};
36
37                var modelLoader = config[item].modelLoader ? config[item].modelLoader : "dojox/app/utils/simpleModel";
38                // modelLoader must be listed in the dependencies and has thus already been loaded so it _must_ be here
39                // => no need for complex code here
40                try{
41                        var modelCtor = require(modelLoader);
42                }catch(e){
43                        throw new Error(modelLoader+" must be listed in the dependencies");
44                }
45                var loadModelDeferred = new Deferred();
46                var createModelPromise;
47                try{
48                        createModelPromise = modelCtor(config, params, item);
49                }catch(e){
50                        throw new Error("Error creating "+modelLoader+" for model named ["+item+"]: "+e.message);
51                }
52                when(createModelPromise, lang.hitch(this, function(newModel){
53                        loadedModels[item] = newModel;
54                        app.log("in app/model, for item=[",item,"] loadedModels =", loadedModels);
55                        loadModelDeferred.resolve(loadedModels);
56                        return loadedModels;
57                }), function(e){
58                        throw new Error("Error loading model named ["+item+"]: "+e.message);
59                });
60                return loadModelDeferred;
61        }
62});
Note: See TracBrowser for help on using the repository browser.