File: packages/bricksui-metal/lib/state_handler.js
- /**
- * @module bricksui
- * @submodule bricksui-metal
- */
-
- /**
- * 状态处理器
- * 在extend时将states属性移到_states属性,
- * 继承该接口,可以实现states在子父类间继承
- *
- * App.DemoView=BricksUI.View.extend({
- * states:{
- *
- * }
- * });
- *
- * App.DemoView=BricksUI.View.extend({
- * states:function(){
- * return {
- *
- * };
- * }
- * });
- * TODO
- * 1.状态继承需要处理
- */
- var merge = Ember.merge,
- Mixin = Ember.Mixin,
- get = Ember.get,
- typeOf = Ember.typeOf
- ;
- /**
- * @class StateHandler
- * @namespace BricksUI
- */
- var StateHandler = Mixin.create({
- mergedProperties: ["_states"],
-
- willMergeMixin: function (props) {
- //TODO 处理 super 方法
- var hashName;
- if (!props._states) {
- if (typeof (props.states) === "function") {
- props.states = props.states();
- }
- if (typeof (props.states) === "object") {
- hashName = "states";
- }
- if (hashName) {
- props._states = Ember.merge(props._states || {}, props[hashName]);
- }
- //这里处理了states属性,后续就不再需要处理,所以删除
- delete props[hashName];
- }
- }
- /*
- send:function(actionName){
- //TODO
- }
- */
- });
- /**
- * TODO
- * 1.从Event入手
- * 2.从Action入手,Action也是有Event入手,但是不用管理Event
- * 需要在模板里面显示指定action
- * 模板也是组件的内部属性,所以模板操作state是合理的
- * Ember target 有两个内置关键字:controller和 view
- * 现在多加一个内置关键字:states,让用户可以从模板触发
- * {{action unfold target="states"}}
- */
-
- export default
- StateHandler;
-
-