javascript-state-machine onafterevent 未被调用

标签 javascript user-interface workflow

我正在使用迄今为止优秀的 '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/

相关文章:

javascript - 将模型绑定(bind)到选定的值,而不是在项目上选择设置

javascript - 使用 javascript 将图案应用到 3D 图像

user-interface - 商业游戏软件中使用的库(SDL的替代品)

Git 生产和开发服务器工作流程

javascript - react : Flow: Import a local js file - cannot resolve issue module

javascript - 尝试在表中映射响应但未获得预期输出

c# - 如何使用 MainMenu 在状态栏上显示与菜单项相关的文本?

Git Integration Manager Workflow——一个还是多个存储库?

java - 企业级排队/消息系统何时取代更简单的工作流程管理系统?

javascript - 检查数组元素的第一个字符