一个有限状态机库.
值得关注的是VERSION 3.0 已经重写了。 现有2.x用户应该阅读升级指南.
在浏览器中使用:
<script src='state-machine.js'></script>
在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来创建.
阅读更多有关的文档
- States and Transitions状态和转换
- Data and Methods数据和方法
- Lifecycle Events生命周期事件
- Asynchronous Transitions异步转换
- Initialization初始化
- Error Handling错误处理
- State History状态历史
- Visualization可视化
- State Machine Factory状态机工厂
- Upgrading from 2.x从2.x升级
你可以通过创建issues或者pr来给项目贡献
查看 发行记录 文件.
查看MIT协议 文件.
如果你有想法, 反馈, 需求 或者bugs报告, 你可以联系我 jake@codeincomplete.com, 或通过我的网站: Code inComplete