状态机是目前库中所存在的一个高级的概念,它一定程度上是现有功能的一个组合,使用字符串指令针对状态机的操作,以下是其运作流程:
绑定一个事件
-> 这个事件是一个命令,目前有四种基础命令:
(赋值)=,(添加)+,(移除)-,(切换)?
-> 事件触发,动态解析命令对状态机进行相应的操作
(某种程度上就限制了效率的保证)
这四个基础命令都是统一的格式:双目运算符的格式。
左边的参数是目标key,字符串类型,所以这是可动态的:
{{" {{key}} = {{"static value"}} "}}
可以看到一个命令是一个字符串,而后两个参数都需要用{{}}
进行包裹,其中第一个参数作为目标key,第二个参数是赋值内容,在源码不到白行的实现中也是很明了的知道其命令最终编译出来的代码是:
key = VI.get(key);
value = "static value";
VI.set(key,value);
再来一个例子:
{{" {{"key"}} = {{value}} "}}
//==>
key = "key";
value = VI.get("value");
VI.set(key,value);
在状态机的操作中,两个参数都可以是动态的,就造就了状态机操作这个功能的灵巧与强大。比如一套操作中切换一个状态机,就可以把所有的操作换一个目标换一个效果。如果配合DOM的className进行使用能有什么效果,你懂的。
然而,状态机强化了View层的功能,我依然不建议把变化大的业务功能放到这块中,如果你不怕被团队的人吐槽的话(××的改个代码还要跑到View层改!!)
不过这个功能用来写Weight还是很方便的,毕竟Weight中变动的是数据而不是Weight自有的逻辑(好吧我最原始的目的暴露出来的……呵呵)