まず最初に、@Rob の回答に感謝します。最終的に、カスタム ソリューションを使用することにしました。
したがって、他のJavaScriptフロー制御の実装をいくつか調べました
すなわち:
フロー
https://github.com/bemson/Flow/wiki/Flow-Use-Cases
定義済みの構文でアプリケーション フロー (JavaScript 関数の呼び出し順序) を定義できる場所。
私は特に、アプリケーション フローの状態に入る前、および状態を終了する前に実行されるフローの事前および事後条件関数 (_in および _out) のアイデアが気に入りました。さらに、特定のフロー状態にアタッチされた _vars 配列のアイデアは興味深いものでした。
詳細については、 https://github.com/bemson/Flow/wiki/Using-Flow#s3-1を参照してください。
James Mc Parlane は、JavaScript で有限状態マシン (FSM) を開発し、プレーンな JavaScript ではなく XML でアプリケーション フローを記述しました。これは良いアイデアだと思いましたが、彼が行っているのは、サーバー側ではなくクライアント側で XML を解析することです。これは私にとってマイナス面です。
いずれかの方法。彼はこのような状態を説明します
<fsm>
<states>
<state name="Start">
<enter call="initApp();" />
<exit call="exitApp();" />
<to>
<from state="" call="displayStartPage();" />
<from state="loggedOut" call="showLogoutMessage();displayStartPage();" />
</to>
</state>
<state name="loggedIn">
<include state="authenticated" />
<exclude state="loggedOut" />
<negate state="loggedOut" />
</state>
</states>
</fsm>
彼は次の可能なタグを使用します
<fsm> ... the root node of the fsm (I renamed it to better reflect the purpose)
<states> ... a collection of possible states (a state can have sub-states)
<state> ... a possible state
<exclude> ... if a state is active excluded one should be inactive
<include> ... if a state is active the included state should also be active
<require> ... should check that a javascript condition is true
<unrequire> ... the negation of <require>
<negate> ... negate a state if you enter another state
<affirm> ... make another state active, if entering a specific state
<enter> ... fire a trigger when state gets active
<exit> ... fire a trigger when state gets in-active
<from>/<to> ... specify state transitions and actions according to these transitions
<lock> ... lock state, until state machine is reset
さらに、いくつかの便利な機能が必要になる場合があります。ビューに名前を付けるには:
testState ... to test the state of the FSM
negateState ... negate a state
affirmState ... set a new state and issue according transition events
flipState ... set state from active to inactive and vice versa
determine ... determine current state
http://blog.metawrap.com/2008/07/21/javascript-finite-state-machinetheorem-prover/
および
http://blog.metawrap.com/2008/09/25/practical-applications-of-
を参照してください。詳細については、finite-state-machines-in-web-development/
を参照してください。
私が Camilo Azula から見つけた他の解決策は、オブザーバーとコマンド パターンを組み合わせたものです。
http://camiloazula.wordpress.com/2010/10/14/fsm/
名前付き定数を使用して状態を定義し、オブザーバーに状態の変化を通知します。
Michael Schuerig がこのトピックについて書いていますが、残念ながら彼の情報源はオンラインではありません。とにかく、彼のコンセプトは、おそらく jQuery や他の JS フレームワークから知っているメソッド チェーンに基づいています。
最後に、IBM には、このトピックに焦点を当てたチュートリアルもあります
http://www.ibm.com/developerworks/library/wa-finitemach1/
http://www.ibm.com/developerworks/library/wa-finitemach2/
http://www.ibm.com/developerworks/library/ WA-FINITEMACH3/
でも正直、あまり好きではありませんでした。
現在、Spring の式言語を使用する Spring の Web Flow に飛び込んでいますが、これは非常に興味深いと思います。
いずれにせよ、私の最終製品は、James Mc Parlane のフロー定義に似たフロー定義に基づいていますが、彼のアプローチとは対照的に、サーバー側でアプリケーション フローを定義する XML を解析します。
この XML に基づいて、対応するアプリケーション フローを含む各ページ (各ページには独自の XML があります) に JavaScript を添付します。私たちのシステムは ExtJS に基づいているため、
http://docs.sencha.com/ext-js/4-0/#/api/Ext.EventManager-method-addListener
addListener
ユーザー イベントに基づいてアプリケーション フローを操作する関数。
これが将来誰かに役立つことを願っています。
よろしく
JS