2012-09-10 46 views
1

說我有一個這樣的畫面:在Aviarc屏幕中設置AJAX工作流程響應處理程序的正確方法是什麼?

<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塊中的命令只是連續執行?

回答

2

當前,call-ajax-workflow確實會在通話發生時阻止其運行的時間線。它不會阻擋屏幕或任何其他時間線。

在Aviarc 2中,您可以從腳本調用ajax工作流程以使其無阻塞。我不確定在Aviarc 3中是否仍然可以輕鬆訪問此功能(推測是這樣)。

當前處理程序應當放在內聯中,以便它們緊靠它們正在處理的代碼,或者,如果處理程序應該處理多個調用,則應將其放入一個操作塊中,並調用該操作塊作爲內聯處理程序。

onAjaxRequestCompleted事件應該只會被綁定到,如果有任何事情需要從ajax調用返回不加區分地完成。

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

相關問題