4

SCXML で作成されたステート マシンで、遷移の動的ターゲット値を設定する方法はありますか?

つまり、scxml のデータモデルとして設定された「obj」というオブジェクトがあるとします。したがって、次のように条件を設定できます (オブジェクトに checkCondition というプロパティがある場合)。

cond="obj.checkCondition"

<state id="state1">
    <transition cond="obj.checkCondition" target="state2"/>
</state>
<state id="state2">
    ...
</state>

obj に nextTarget という別のプロパティがあります。オブジェクトからその値を読み取るこの遷移でターゲットを設定したいと思います (条件で行われるように)。

<state id="state1">
    <transition cond="obj.checkCondition" target="eval(obj.nextTarget)"/>
</state>
<!-- Where in obj.nextTarget there it has been set as value "state1", "state2" or any state name -->

これを行う構文はありますか?

ありがとう。

4

4 に答える 4

2

transition要素にcond属性を指定できる

<transition cond="data.value > 10" target="state2"/>
于 2012-07-10T03:00:47.727 に答える
0

SCXML は、状態と、それらの状態間の可能な遷移をかなり単純に記述したものです。条件付き遷移のようなものはありません。

ただし、各状態から複数の遷移を持つことができます。状態からの遷移の数に制限はありません。

したがって、あなたの質問に対する答えは、行きたい条件付きの方向を記述するのに必要な数の遷移があり、他の場所 (つまり Java) で条件を評価するということです。

ソースの例は、SCXML ウィキペディアのエントリです。

<state id="ready">
    <transition event="watch.start" target="running"/>
</state>
<state id="running">
    <transition event="watch.split" target="paused"/>
    <transition event="watch.stop" target="stopped"/>
</state>
<state id="paused">
    <transition event="watch.unsplit" target="running"/>
    <transition event="watch.stop" target="stopped"/>
</state>
<state id="stopped">
    <transition event="watch.reset" target="ready"/>
</state>

ここに画像の説明を入力

于 2011-09-21T18:08:25.530 に答える
0

非常にアプリケーション指向の複雑なステート マシン フレームワークを構築しようとしています。これは、EXCEL を使用する代わりに、すべてのスプレッドシート アプリケーション用に独自のスプレッドシート フレームワークを構築することに少し似ています。より良いアプローチは、既存のフレームワークを使用し、SCXML でイベントとアクションを定義することです。SM API フレームワークの例は、www.StateSoft.org -> State Machine Gallery で確認できます。

-ヤヌス

于 2011-09-21T17:55:53.260 に答える
0

@Charles Goodwinの答えはかなり正確ですが...言葉を追加するかもしれません。単純化するには:

  • デザインにあるもの: 1 つのトランジション my_transitionがあります
  • あなたが望むこと: この遷移がいくつかの state_targets につながる可能性があること

あなたは問題の論理を完全に隠しています。

あなたが持っているべきもの:いくつかのトランジション

  • my_transition_A ターゲティング state_A_target
  • my_transition_B ターゲティング state_B_target
  • my_transition_C ターゲティング state_C_target
  • my_transition_D ターゲティング state_D_target...

デザインでターゲットを動的に設定するプロセスは、デザインで target_state を選択した場合と同様に、my_transition_A または my_transition_C のイベントを動的に処理します)。

于 2012-10-12T11:15:54.633 に答える