2018-02-01 state-machine

2018-02-01  本文已影响0人  欧特雨

状态机的使用

来源:https://github.com/jakesgordon/javascript-state-machine

使用方法:require状态机模块,new一个状态机对象,并且传入一个对象,对象可以定义几个属性,其中有Transitions,methods,init,data等。

Transitions是一个数组,数组中放入{name:'toYellow',from:'green',to:'yellow'},这样形式的元素,代表着一个变化,名字是toYellow,从green变成yellow。methods是方法,是状态切换的时候自动调用的,顺序为onBeforeTransition--onLeaveState--onTransition--onEnterState--onAfterTransition。也可以定义为onBeforeToYellow--onLeaveGreen--onTransition--onEnterYellow--onAfterToYellow这样的形式。init为初始状态,如果有,new一个状态机对象的时候,会自动从none转换为定义的初始状态,相应的方法也会被调用。data用来存放使用者自定义的变量,比如

var StateMachine = require('state-machine');

var fsm = new StateMachine({

init:'green',

Transitions:[

{name:'toYellow',from:'green',to:'yellow'},

],

methods: {

onBeforeTransition: function (lifecycle) { },

onLeaveState: function (lifecycle) { },

onEnterState: function (lifecycle) { },

onAfterTransition: function (lifecycle) { },

onTransition: function (lifecycle) { },

});

fsm.is(s) - 如果当前状态是传入的状态,返回true。

fsm.can(t) - 如果可以执行该transition,返回true。

fsm.cannot(t) - 如果不可以执行该transition,返回true。

fsm.transitions() - 返回当前状态可以调用的transition,类型数组

fsm.allTransitions() - 返回所有可用的transition。

fsm.allStates() - 返回所有能够转换的状态。

在methods中不能直接调用fsm.can(t) 和fsm.cannot(t) ,可能是因为状态还没转换完成,使用setTimeout(function(){},0)就没问题了。

用cocoscreator实现的红绿灯:https://pan.baidu.com/s/1jJiFnIu

上一篇 下一篇

猜你喜欢

热点阅读