_base.js 2.0 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364
  1. define("dojox/mvc/_base", [
  2. "dojo/_base/kernel",
  3. "dojo/_base/lang",
  4. "./StatefulModel",
  5. "./Bind",
  6. "./_DataBindingMixin",
  7. "./_patches"
  8. ], function(kernel, lang, StatefulModel){
  9. // module:
  10. // dojox/mvc/_base
  11. // summary:
  12. // Pulls in essential MVC dependencies such as basic support for
  13. // data binds, a data model and data binding mixin for dijits.
  14. kernel.experimental("dojox.mvc");
  15. var mvc = lang.getObject("dojox.mvc", true);
  16. /*=====
  17. mvc = dojox.mvc;
  18. =====*/
  19. // Factory method for dojox.mvc.StatefulModel instances
  20. mvc.newStatefulModel = function(/*Object*/args){
  21. // summary:
  22. // Factory method that instantiates a new data model that view
  23. // components may bind to.
  24. // args:
  25. // The mixin properties.
  26. // description:
  27. // Factory method that returns a client-side data model, which is a
  28. // tree of dojo.Stateful objects matching the initial data structure
  29. // passed as input:
  30. // - The mixin property "data" is used to provide a plain JavaScript
  31. // object directly representing the data structure.
  32. // - The mixin property "store", along with an optional mixin property
  33. // "query", is used to provide a data store to query to obtain the
  34. // initial data.
  35. // This function returns an immediate dojox.mvc.StatefulModel instance or
  36. // a Promise for such an instance as follows:
  37. // - if args.data: returns immediate
  38. // - if args.store:
  39. // - if store returns immediate: this function returns immediate
  40. // - if store returns a Promise: this function returns a model
  41. // Promise
  42. if(args.data){
  43. return new StatefulModel({ data : args.data });
  44. }else if(args.store && lang.isFunction(args.store.query)){
  45. var model;
  46. var result = args.store.query(args.query);
  47. if(result.then){
  48. return (result.then(function(data){
  49. model = new StatefulModel({ data : data });
  50. model.store = args.store;
  51. return model;
  52. }));
  53. }else{
  54. model = new StatefulModel({ data : result });
  55. model.store = args.store;
  56. return model;
  57. }
  58. }
  59. };
  60. return mvc;
  61. });