美文网首页
2018-02-01 state-machine

2018-02-01 state-machine

作者: 欧特雨 | 来源:发表于2018-02-01 22:41 被阅读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

    相关文章

      网友评论

          本文标题:2018-02-01 state-machine

          本文链接:https://www.haomeiwen.com/subject/htvjzxtx.html