main.js 3.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115
  1. define("dojox/app/main", ["dojo/_base/kernel",
  2. "dojo/_base/lang",
  3. "dojo/_base/declare",
  4. "dojo/_base/Deferred",
  5. "dojo/_base/connect",
  6. "dojo/ready",
  7. "dojo/_base/window",
  8. "dojo/dom-construct",
  9. "./scene"],
  10. function(dojo, lang, declare, deferred, connect, ready, baseWindow, dom, sceneCtor){
  11. dojo.experimental("dojox.app");
  12. var Application = declare([sceneCtor], {
  13. constructor: function(params){
  14. this.scenes={};
  15. if(params.stores){
  16. //create stores in the configuration.
  17. for (var item in params.stores){
  18. if(item.charAt(0)!=="_"){//skip the private properties
  19. var type = params.stores[item].type? params.stores[item].type : "dojo.store.Memory";
  20. var config = {};
  21. if(params.stores[item].params){
  22. dojo.mixin(config, params.stores[item].params);
  23. }
  24. var storeCtor = dojo.getObject(type);
  25. if(config.data && lang.isString(config.data)){
  26. //get the object specified by string value of data property
  27. //cannot assign object literal or reference to data property
  28. //because json.ref will generate __parent to point to its parent
  29. //and will cause infinitive loop when creating StatefulModel.
  30. config.data = dojo.getObject(config.data);
  31. }
  32. params.stores[item].store = new storeCtor(config);
  33. }
  34. }
  35. }
  36. },
  37. // load default view and startup the default view
  38. start: function(applicaton){
  39. var child = this.loadChild();
  40. deferred.when(child, dojo.hitch(this, function(){
  41. this.startup();
  42. //set application status to STARTED
  43. this.setStatus(this.lifecycle.STARTED);
  44. }));
  45. },
  46. templateString: "<div></div>",
  47. selectedChild: null,
  48. baseClass: "application mblView",
  49. defaultViewType: sceneCtor,
  50. buildRendering: function(){
  51. if (this.srcNodeRef===baseWindow.body()){
  52. this.srcNodeRef = dom.create("DIV",{},baseWindow.body());
  53. }
  54. this.inherited(arguments);
  55. }
  56. });
  57. function generateApp(config,node,appSchema,validate){
  58. //console.log("config.modules: ", config.modules);
  59. var modules = config.modules.concat(config.dependencies);
  60. if (config.template){
  61. //console.log("config.template: ", config.template);
  62. modules.push("dojo/text!" + "app/" + config.template);
  63. }
  64. //console.log("modules: ", modules);
  65. require(modules, function(){
  66. var modules=[Application];
  67. for(var i=0;i<config.modules.length;i++){
  68. modules.push(arguments[i]);
  69. }
  70. if (config.template){
  71. var ext = {
  72. templateString: arguments[arguments.length-1]
  73. }
  74. }
  75. App = declare(modules,ext);
  76. ready(function(){
  77. app = App(config,node || baseWindow.body());
  78. app.setStatus(app.lifecycle.STARTING);
  79. app.start();
  80. });
  81. });
  82. }
  83. return function(config,node){
  84. if (!config){
  85. throw Error("App Config Missing");
  86. }
  87. if (config.validate){
  88. require(["dojox/json/schema","dojox/json/ref","dojo/text!dojox/application/schema/application.json"],function(schema,appSchema){
  89. schema = dojox.json.ref.resolveJson(schema);
  90. if (schema.validate(config,appSchema)){
  91. generateApp(config,node);
  92. }
  93. });
  94. }else{
  95. generateApp(config,node);
  96. }
  97. }
  98. });