javascript状态机onafterevent是't被叫

javascript-state-machine onafterevent isn't being called

本文关键字:被叫 状态机 onafterevent javascript      更新时间:2023-09-26

我使用的是迄今为止出色的"javascript状态机"库。然而,对于看起来像A)的事件,我有一些看起来像B)的转换回调。我有一个类似的"onafterevent"回调,在其他地方也有效。但是"内部零件"没有开火,我不知道为什么。

我正在调用'my-state-machine.EEpart',它应该在整个转换过程中触发回调。并且ii)正在调用"oneforeEEpart"。所以我不知道为什么这个匿名者没有接到电话。

以前见过这样的东西吗?提前谢谢。

A)

esm:StateMachine.create({首字母:'Es',事件:[{name:"EsE",从:"Es"到:"E"},{name:"EEpart",从:"E"到:"Epart"},{name:"EpartE",从:"Epart"到:"E"},{name:"EE",从:"E"到:"Es"}]

B)

onbeforeEEpart:(event,from,to,args)->。。。onafterEpart:(event,from,to,args)->。。。

更新【2012年3月23日;凌晨2:49】

我尝试从Epart->E手动转换,但在A)中出现了错误。从E->Epart的过渡似乎从未完成。我有一个理论来解释为什么。

在上一个转换之后,我不得不将下一个转换附加到单击函数,如B)所示。这样做包括使用下划线将转换函数重新绑定到状态机。我认为这是造成错误的原因。如果是的话,是否有正确的方法来传递要激发的转换函数?

感谢

A)

未捕获事件EpartE不合适,因为以前的转换未完成

B)

onafterPreviousEvent:(event,from,to,args)->console.log("结束从Es->E的转换")$(我的元素).bind('click',{fu:bar},_.bind(args.data.esm.EEpart,args.data.sim))#状态机为"args.data.exm"

好的,我解决了这个问题。事实证明,我有一个onleaveE事件函数,它正在返回StateMachine.ASYNC标志。回调工作流程如下,调用onleaveE并返回ASYNC标志后才能调用onafterEpart

  • onbeforevent-在事件之前启动
  • onleavestate-离开旧状态时被激发
  • componentstate-在进入新状态时被激发
  • 事后解雇

通常,当您返回StateMachine.ASTNC标志时,您必须在StateMachine对象上手动调用transition()。这很棘手,我已经有一天左右的时间了。希望这能在未来帮助到别人。