说我有这样的屏幕:
<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
块中的命令是否只是串行执行?
答案 0 :(得分:2)
目前,call-ajax-workflow确实阻止了在呼叫发生时运行的时间线。它不会阻止屏幕或任何其他时间线。
在Aviarc 2中,您可以从脚本调用ajax工作流程以使其无阻塞。我不确定Aviarc 3中是否仍然可以轻松访问此功能(可能是这样)。
处理程序当前应该内联,以便它们位于它们正在处理的代码旁边,或者,如果处理程序应该处理多个调用,则应将其放入一个操作块中,并将调用所述操作块作为内联处理程序。
onAjaxRequestCompleted事件应该只有在ajax调用返回时需要不加选择地做的事情时才会绑定。
如果命令被更改为(可能)非阻塞,或者添加了非阻塞的附加命令,或者等等,我希望处理程序可以作为命令的子元素添加