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;