假设我有一个这样的屏幕:
<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块中的命令只是串行执行?
发布于 2012-09-10 09:49:51
目前,call-ajax-workflow确实会在调用发生时阻塞它运行的时间线。它不会阻挡屏幕或任何其他时间线。
在Aviarc2中,您可以从脚本调用ajax工作流,使其成为非阻塞的。我不确定这个功能在Aviarc3中是否仍然容易访问(大概是)。
处理程序当前应该放在内联中,以便它们紧挨着它们正在处理的代码,或者,如果一个处理程序应该处理多个调用,则应该将其放入一个action块中,并将其作为内联处理程序调用所述action块。
只有在需要对来自ajax调用的返回不加区别地执行某些操作时,才应该绑定onAjaxRequestCompleted事件。
如果命令被更改为(可能是)非阻塞的,或者如果添加了一个非阻塞的附加命令,等等,我希望处理程序可以作为命令的子元素添加。
https://stackoverflow.com/questions/12344345
复制相似问题