1

次のような画面があるとします。

<screen>
    <button label="Foo" name="foo-button"/>

    <action:behaviors>
        <action:when widget-event="foo-button.onClick">
            <action:call-ajax-workflow name="ajax/do-lots-of-foo"/>
            <!-- (1) -->
            <action:call-ajax-workflow name="ajax/do-less-foo"/>
            <!-- (2) -->
        </action:when>

        <action:when system-event="onAjaxRequestCompleted">
            <!-- (3) -->
        </action:when>
    </action:behaviors>
</screen>

各AJAXリクエストのハンドラーを配置する正しい場所はどこですか?理論的には、ワークフローが本当に非同期であるかのように、(1)または(2)のいずれかが正しくない場合、のajax/do-less-foo前に戻る必要があると思いますajax/do-lots-of-foo

私の本能は、場所(3)で応答を処理し、の値に基づいて条件付きで異なるコードを実行することですevent-parameters.workflow

これは正しいです?または、call-ajax-workflow実際にブロックしていて、ブロック内のコマンドがonClickシリアルに実行されているだけですか?

4

1 に答える 1

2

現在、call-ajax-workflow は、呼び出しが行われている間、実行中のタイムラインをブロックします。画面やその他のタイムラインをブロックしません。

Aviarc 2 では、スクリプトから ajax ワークフローを呼び出して非ブロッキングにすることができました。この機能が Aviarc 3 でも簡単にアクセスできるかどうかはわかりません (おそらくそうです)。

ハンドラーは現在、処理しているコードの隣に配置する必要があります。または、ハンドラーが複数の呼び出しを処理する必要がある場合は、インライン ハンドラーとしてアクション ブロックへの呼び出しを含むアクション ブロックに配置する必要があります。

onAjaxRequestCompleted イベントは、ajax 呼び出しから返されたときに無差別に実行する必要がある場合にのみバインドする必要があります。

コマンドが(おそらく)ノンブロッキングに変更された場合、またはノンブロッキングの追加コマンドが追加された場合など、コマンドのサブ要素としてハンドラーを追加できると思います。

于 2012-09-10T01:49:51.103 に答える