API Docs for:
Show:

File: packages/bricksui-metal/lib/state_handler.js

  1. /**
  2. * @module bricksui
  3. * @submodule bricksui-metal
  4. */
  5.  
  6. /**
  7. * 状态处理器
  8. * 在extend时将states属性移到_states属性,
  9. * 继承该接口,可以实现states在子父类间继承
  10. *
  11. * App.DemoView=BricksUI.View.extend({
  12. * states:{
  13. *
  14. * }
  15. * });
  16. *
  17. * App.DemoView=BricksUI.View.extend({
  18. * states:function(){
  19. * return {
  20. *
  21. * };
  22. * }
  23. * });
  24. * TODO
  25. * 1.状态继承需要处理
  26. */
  27. var merge = Ember.merge,
  28. Mixin = Ember.Mixin,
  29. get = Ember.get,
  30. typeOf = Ember.typeOf
  31. ;
  32. /**
  33. * @class StateHandler
  34. * @namespace BricksUI
  35. */
  36. var StateHandler = Mixin.create({
  37. mergedProperties: ["_states"],
  38.  
  39. willMergeMixin: function (props) {
  40. //TODO 处理 super 方法
  41. var hashName;
  42. if (!props._states) {
  43. if (typeof (props.states) === "function") {
  44. props.states = props.states();
  45. }
  46. if (typeof (props.states) === "object") {
  47. hashName = "states";
  48. }
  49. if (hashName) {
  50. props._states = Ember.merge(props._states || {}, props[hashName]);
  51. }
  52. //这里处理了states属性,后续就不再需要处理,所以删除
  53. delete props[hashName];
  54. }
  55. }
  56. /*
  57. send:function(actionName){
  58. //TODO
  59. }
  60. */
  61. });
  62. /**
  63. * TODO
  64. * 1.从Event入手
  65. * 2.从Action入手,Action也是有Event入手,但是不用管理Event
  66. * 需要在模板里面显示指定action
  67. * 模板也是组件的内部属性,所以模板操作state是合理的
  68. * Ember target 有两个内置关键字:controller和 view
  69. * 现在多加一个内置关键字:states,让用户可以从模板触发
  70. * {{action unfold target="states"}}
  71. */
  72.  
  73. export default
  74. StateHandler;
  75.