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 回答