2012-03-23 19 views
2

私はこれまでに優れた'javascript-state-machine'ライブラリを使用しています。しかし、A)のような私のイベントでは、私はB)のようないくつかの移行コールバックを持っています。私は他の場所で働いている同様の 'onafterevent'コールバックを持っています。しかし'onafterEEpart'は発砲していないので、その理由を理解できません。javascript-state-machine onaftereventが呼び出されていません

私は'my-state-machine.EEpart'に電話をかけており、移行中にコールバックが発生するはずです。そして、ii)'onbeforeEEpart'が呼び出されています。だから私はこのonftereventがなぜ呼び出されていないのかについて迷っている。

これまでにみたことがある人は誰ですか?前もって感謝します。

A)

 

    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) -> 
    ... 

UPDATE [2012年3月23日。 2:49 am]

Epart-> Eから手動で移行しようとしましたが、A)でエラーが発生しました。 E-> Epartからの移行は決して完了していないようです。そして私には理由についての理論があります。

前回の移行後、B)のように次のトランジションをクリック機能にアタッチする必要がありました。これには、ステートマシンへの移行機能をリバインドするためのアンダースコアの使用が含まれます。私はこれがエラーを引き起こしていると思います。それがあれば、移行関数を回して解雇する正しい方法がありますか?

おかげ

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' 

答えて

2

OK]を、私はこれを解決しました。それは、onleaveE StateMachine.ASYNCフラグを返すイベント関数があったことが判明しました。コールバックのワークフローは以下の通りです、とonleaveEが呼び出され、onafterEEpartを呼び出すことができる前にASYNCフラグを返すされていました:

  • onbeforeevent - 火力古い状態
  • を残す - イベント
  • onleavestate前に解雇します
  • onenterstate - 火力新しい状態に入る
  • onafterevent - トリガーされたイベント

通常、StateMachine.ASTNCフラグを返すときは、stateMachineオブジェクトのtransition()を手動で呼び出す必要があります。これはやりにくく、1日かそれ以上の間私を抱きました。うまくいけば、将来誰かを助けることでしょう。

関連する問題