无效转换
默认情况下,如果试图触发一个当前状态不允许的转换动作,状态机将抛出异常。如果你更愿意自己处理这个问题,可以自定义一个onInvalidTransition
处理方法:
var fsm = new StateMachine({
init: 'A',
transitions: [
{ name: 'step', from: 'A', to: 'B' },
{ name: 'reset', from: 'B', to: 'A' }
],
methods: {
onInvalidTransition: function(transition, from, to) {
throw new Exception("transition not allowed from that state");
}
}
});
fsm.state; // 'A'
fsm.can('step'); // true
fsm.can('reset'); // false
fsm.reset(); // <-- 抛出 "transition not allowed from that state"
待定转换
默认情况下,如果试图触发一个生命周期事件挂起的转换动作,状态机将抛出异常。如果你更愿意自己处理这个问题,可以自定义一个onPendingTransition
处理方法:
var fsm = new StateMachine({
init: 'A',
transitions: [
{ name: 'step', from: 'A', to: 'B' },
{ name: 'step', from: 'B', to: 'C' }
],
methods: {
onLeaveA: function() {
this.step(); // <-- uh oh, trying to transition from within a lifecycle event is not allowed
},
onPendingTransition: function(transition, from, to) {
throw new Exception("transition already in progress");
}
}
});
fsm.state; // 'A'
fsm.can('step'), // true
fsm.step(); // <-- 抛出 "transition already in progress"