我正在使用迄今为止优秀的 'javascript-state-machine'图书馆。然而,对于看起来像 A) 的事件,我有一些看起来像 B) 的转换回调。我有一个类似的“onafterevent”回调,正在其他地方工作。但 'onafterEEpart' 没有触发,我不明白为什么。
我)调用'my-state-machine.EEpart',这应该在整个转换过程中触发回调。 ii) 'onbeforeEEpart' 被调用。所以我不知道为什么这个 onafterevent 没有被调用。
有人见过这样的事情吗?提前致谢。
一)
esm : StateMachine.create({ initial: 'Es', events: [ { name: 'EsE', from: 'Es', to: 'E' }, { name: 'EEpart', from: 'E', to: 'Epart' }, { name: 'EpartE', from: 'Epart', to: 'E' }, { name: 'EEs', from: 'E', to: 'Es' } ]
B)
onbeforeEEpart: (event, from, to, args) -> ... onafterEEpart: (event, from, to, args) -> ...
更新 [2012 年 3 月 23 日;凌晨 2:49]
我尝试手动从 Epart->E 转换,并在 A) 中收到错误。从 E 到 Epart 的转变似乎从未完成。我有一个关于原因的理论。
在上一个转换之后,我必须将下一个转换附加到单击函数,如 B) 中所示。这样做包括使用下划线将我的转换函数重新绑定(bind)到我的状态机。我认为这是导致错误的原因。如果是,是否有正确的方法来传递要触发的转换函数?
谢谢
A)
Uncaught event EpartE inappropriate because previous transition did not complete
B)
onafterPreviousEvent: (event, from, to, args) -> console.log('END Transition from Es->E') $(my-element) .bind('click', { fu: bar }, _.bind(args.data.esm.EEpart, args.data.esm)) # state machine is 'args.data.esm'
最佳答案
好的,我解决了这个问题。事实证明,我有一个 onleaveE 事件函数,它返回 StateMachine.ASYNcflags。回调工作流程如下,在调用 onafterEEpart 之前调用 onleaveE 并返回 ASYNcflags:
- onbeforeevent - 在事件发生之前触发
- onleavestate - 离开旧状态时触发
- onenterstate - 进入新状态时触发
- onafterevent - 事件发生后触发
通常,当您返回 StateMachine.ASTNcflags时,您必须在 stateMachine 对象上手动调用 transition()。这很棘手,让我花了一天左右的时间。希望它能帮助将来的人。
关于javascript-state-machine onafterevent 未被调用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9834692/