在Aviarc屏幕中设置AJAX工作流响应处理程序的正确方法是什么?

时间:2012-09-10 01:15:49

标签: ajax handler response aviarc

说我有这样的屏幕:

<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块中的命令是否只是串行执行?

1 个答案:

答案 0 :(得分:2)

目前,call-ajax-workflow确实阻止了在呼叫发生时运行的时间线。它不会阻止屏幕或任何其他时间线。

在Aviarc 2中,您可以从脚本调用ajax工作流程以使其无阻塞。我不确定Aviarc 3中是否仍然可以轻松访问此功能(可能是这样)。

处理程序当前应该内联,以便它们位于它们正在处理的代码旁边,或者,如果处理程序应该处理多个调用,则应将其放入一个操作块中,并将调用所述操作块作为内联处理程序。

onAjaxRequestCompleted事件应该只有在ajax调用返回时需要不加选择地做的事情时才会绑定。

如果命令被更改为(可能)非阻塞,或者添加了非阻塞的附加命令,或者等等,我希望处理程序可以作为命令的子元素添加