如何將一個JQuery.Deferred()對象上的所有事件傳播到另一個JQuery.Deferred()對象?在JQuery.Deferred對象之間傳播事件
是否有更好的/簡單/短調用其他對象.rejectWith
和.resolveWith
方式,然後同時處理.fail
和
.then
.done
? 我假設我不必處理
.done
.then
,因爲當我調用拒絕或解決時它將被調用。
我懷疑也許這可以使用.pipe
來完成,但我不知道如何。
UPDATE:
注:我也我固定的一些文字上述每@弗雷德裏克·哈米迪的評論。
我想實現是以下幾點:
我已經陷入到服務器,讓AJAX調用一個API, 他們將返回Ajax對象(這是一個$ .Deferred本身)。
在某些時候,我需要處理一個我沒有網絡工作的情況(這是針對在移動設備上運行的phonegap應用程序)。
我想要做的是,如果沒有網絡連接,我會顯示一個對話框,提示用戶解決網絡問題並點擊「重試」。
但是在這種情況下,我將不會調用$ .ajax,直到用戶點擊重試爲止,所以我沒有$ .Defferred對象來返回調用API的函數開始。
所以我結束瞭解,我可以創建一個新的$ .Defferred並返回它,並在重試按鈕的回調中調用$ .ajax本身,將其設置爲「relay」/將defferred事件傳播到我剛剛通過將它作爲封閉的一部分進行了返回。
但我不確定如何去做。我用的方法.pipe
是查詢股價,因爲其描述說,它的一個:
實用的方法來過濾和/或鏈Deferreds。
我很抱歉,這讓我的問題更加清楚。
我不知道我正確理解你的問題。 'then()'用第二個參數覆蓋'fail()',所以你不必同時使用兩者。 'pipe()'確實是將延遲調用的結果傳遞給另一個調用的方式,但即使在這種情況下,您仍然需要調用'resolveWith()','rejectWith()'和可能的'notifyWith() (或者像'$ .ajax()'這樣的其他東西)來解決管道延遲調用。你能舉一個你想達到的例子嗎? – 2012-04-22 11:08:23
我讀了這個問題,突然間,我意識到我對* jQuery.deferred'的整個概念有*不知道。 ......再過一個晚上的睡眠。 =/ – 2012-04-22 13:34:45