javascript-state-machine文档06:初始化可选项

268 阅读1分钟

显式的指定初始转换动作

默认情况下,如果未指定初始状态,状态机将处于none状态,在构建过程中不会触发任何生命周期事件,你需要提供一个明确的转换动作来退出这个状态

  var fsm = new StateMachine({
    transitions: [
      { name: 'init', from: 'none', to: 'A' },
      { name: 'step', from: 'A',    to: 'B' },
      { name: 'step', from: 'B',    to: 'C' }
    ]
  });
  fsm.state;    // 'none'
  fsm.init();   // 显示的触发'init()'转换动作
  fsm.state;    // 'A'

隐式的指定初始化转换动作

如果你指定初始状态的名称(如本文档中的大多数示例所示),则创建了隐式init转换动作,它及相关的生命周期事件会在构建状态机时触发。

这是最常见的初始化策略,90%的情况下你应该使用。

  var fsm = new StateMachine({
    init: 'A',
    transitions: [
      { name: 'step', from: 'A', to: 'B' },
      { name: 'step', from: 'B', to: 'C' }
    ]
  });           // 在构建期间'init()'转换动作被触发:从'none'转换到'A'
  fsm.state;    // 'A'

初始化和状态机工厂

状态机工厂的每个构造实例都会触发init转换动作。

  var FSM = StateMachine.factory({
    init: 'A',
    transitions: [
      { name: 'step', from: 'A', to: 'B' },
      { name: 'step', from: 'B', to: 'C' }
    ]
  });

  var fsm1 = new FSM(),   // fsm1中'init()'转换动作被触发:从'none'转换到'A'
      fsm2 = new FSM();   // fsm2中'init()'转换动作被触发:从'none'转换到'A'