3

次の scxml コードに問題があります。

<?xml version="1.0" encoding="utf-8"?>
<scxml xmlns="http://www.w3.org/2005/07/scxml" version="1.0" initialstate="global">
    ...
    <state id="global" initial="init">
    ...
    <state id="state2">
        <onentry>
            <if cond="mydata.skip">
                <if cond="_event.name=='ev.prev'">
                    <raise event="ev.prev" />
                    <else/>
                    <raise event="ev.next" />
                </if>
            </if>
       </onentry>
       <transition event="ev.next" target="end" />
       <transition event="ev.prev" target="state1" />
    </state>
    ...
    </state>
</scxml>

問題なく動作しますが、onentry 要素を追加すると、プロセッサは次のように言います。

[WARN] Ignoring element <raise> in namespace "http://www.w3.org/2005/07/scxml" at null:2:882 and digester match "scxml/state/state/onentry/if/if/raise"
[WARN] Ignoring element <raise> in namespace "http://www.w3.org/2005/07/scxml" at null:2:912 and digester match "scxml/state/state/onentry/if/if/else/raise"

値上げが分からないようです。「raise」要素を「send」要素に変更しようとしましたが、同様のログ警告が表示されました。誰が何が間違っているのか教えてもらえますか?

ありがとう。

アップデート

次のようなif要素の埋め込みを避けてスキーマを変更しようとしました:

<?xml version="1.0" encoding="utf-8"?>
<scxml xmlns="http://www.w3.org/2005/07/scxml" version="1.0" initialstate="global">
    ...
    <state id="global" initial="init">
    ...
    <state id="state2">
        <onentry>
            <if cond="mydata.skip and _event.name=='ev.prev'">
                <raise event="ev.prev" />
                <else if cond="mydata.skip and _event.name=='ev.next'"/>
                <raise event="ev.next" />
            </if>
       </onentry>
       <transition event="ev.next" target="end" />
       <transition event="ev.prev" target="state1" />
    </state>
    ...
    </state>
</scxml>

ただし、次のエラーも発生します。

[WARN] Ignoring element <raise> in namespace "http://www.w3.org/2005/07/scxml" at null:2:1057 and digester match "scxml/state/state/onentry/if/raise"
4

1 に答える 1

3

レイズイベントも機能しませんでした。ただし、標準に従って、 http ://www.w3.org/TR/scxml/#raise 送信イベントを使用することもできます。それで私はそれを試しました、そして私はそれを機能させることができました。

<state id="testID">
    <onentry>
        <send event="'test.onentry'" />
    </onentry>
    <transition event="test.transition" target="testID2"></transition>
</state>

これにより、イベント test.onentry が期待どおりに送信されました。ただし、二重引用符内の単一引用符に注意してください。

于 2013-06-27T18:16:51.597 に答える