Skip to content

Latest commit

 

History

History
151 lines (105 loc) · 4.25 KB

README_zh-cn.md

File metadata and controls

151 lines (105 loc) · 4.25 KB

Javascript State Machine

NPM version Build Status

一个有限状态机库.

matter state machine


现有用户注意

值得关注的是VERSION 3.0 已经重写了。 现有2.x用户应该阅读升级指南.


安装

在浏览器中使用:

  <script src='state-machine.js'></script>

在下载js文件或者压缩版js文件之后引用。

在Node中使用npm安装:

  npm install --save-dev javascript-state-machine
  or
  npm install --save javascript-state-machine

在Node的js文件中导入:

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

用法

一个状态机可以这样构建:

  var fsm = new StateMachine({
    init: 'solid',
    transitions: [
      { name: 'melt',     from: 'solid',  to: 'liquid' },
      { name: 'freeze',   from: 'liquid', to: 'solid'  },
      { name: 'vaporize', from: 'liquid', to: 'gas'    },
      { name: 'condense', from: 'gas',    to: 'liquid' }
    ],
    methods: {
      onMelt:     function() { console.log('I melted')    },
      onFreeze:   function() { console.log('I froze')     },
      onVaporize: function() { console.log('I vaporized') },
      onCondense: function() { console.log('I condensed') }
    }
  });

... 创建的对象上有包含当前状态的的属性:

  • fsm.state

... 创建的对象上有转换到不同状态的方法:

  • fsm.melt()
  • fsm.freeze()
  • fsm.vaporize()
  • fsm.condense()

... 观察方法在生命周期中自动被调用:

  • onMelt()
  • onFreeze()
  • onVaporize()
  • onCondense()

... 还有下面的帮助方法:

方法 注释
fsm.is(s) 如果当前状态s是当前状态则返回true
fsm.can(t) 如果转换t在当前状态下可以发生则返回true
fsm.cannot(t) 如果转换t在当前状态下不可以发生则返回true
fsm.transitions() 返回当前状态下可以发生的转换的列表
fsm.allTransitions() 返回所有可以发生的转换的列表
fsm.allStates() 返回所有可以出现的状态的列表

术语

一个状态机由一组States状态组成

  • solid
  • liquid
  • gas

一个状态机可以通过Transitions转换改变状态

  • melt
  • freeze
  • vaporize
  • condense

一个状态机在转换期间可以通过观察Lifecycle Events生命周期事件执行操作

  • onBeforeMelt
  • onAfterMelt
  • onLeaveSolid
  • onEnterLiquid
  • ...

一个状态机可以有任意的Data 数据 and Methods 方法.

多个状态机实例可以通过使用State Machine Factory来创建.

文档

阅读更多有关的文档

贡献(〜^㉨^)〜

你可以通过创建issues或者pr来给项目贡献

发行记录

查看 发行记录 文件.

协议

查看MIT协议 文件.

联系

如果你有想法, 反馈, 需求 或者bugs报告, 你可以联系我 jake@codeincomplete.com, 或通过我的网站: Code inComplete