2012-09-30 61 views
2

我試圖從示例應用程序中找出主幹(請參閱https://github.com/elfsternberg/The-Backbone-Store)。代碼使用jQuery的Deferred和promise(),如您在下面的代碼中看到的。我已經閱讀了關於jQuery的文檔,但從下面的示例中找出如何使用這些方法時遇到困難。你可能需要更多的代碼來回答這個問題,但也許不需要。這些是我有關於它的問題jQuery:推遲/承諾

1)是否dfd.resolve調用一次fadeOut完成?如果是這樣,dfd.resolve觸發器是什麼?

2)返回的信息promise.promise();它是否調用延遲方法?什麼時候?爲什麼這樣做?這似乎是一個遞歸方法?

3)dfd.resolve是否有可能觸發其他未在此代碼中顯示的方法?

 hide: function() { 
      if ((":visible") === false) { 

       return null; 

      } 
      promise = $.Deferred(_.bind(function(dfd) { 
       this.el.fadeOut('fast', dfd.resolve)}, this)); 
      return promise.promise(); 
     }, 

     show: function() { 
      if (this.el.is(':visible')) { 
       return; 
      }  
      promise = $.Deferred(_.bind(function(dfd) { 
       console.log("in promise section of show in base view"); 
       this.el.fadeIn('fast', dfd.resolve) }, this)) 
      return promise.promise(); 
     } 
+0

對於第二個問題,看http://stackoverflow.com/q/8073528/1048572 – Bergi

回答

4

1)一旦淡出完成被稱爲dfd.resolve?如果是這樣的話, dfd.resolve觸發器是什麼?

是的。jQuery.fadeOut將回調作爲其參數之一。一旦動畫完成,它將執行回調。在這種情況下,恰好是延期的解決方法。

2)返回的信息promise.promise();它是否調用 延遲方法?什麼時候?爲什麼這樣做?這似乎是一個 遞歸方法?

沒有遞歸在這裏進行promise只是一個保存對創建的Deferred對象的引用的變量。 promise()jQuery.Deferred上的一種方法,它返回Deferred的修改版本,不允許您修改它的行爲方式。因此承諾調用者可以確保它始終以相同的方式執行。

3)是否有可能dfd.resolve觸發其他方法而不是 在此代碼中顯示?

是的。 Deferred只不過是一個允許您註冊回調的對象。撥打.resolve()延期將觸發done handlers,而呼叫.reject()將觸發任何fail handlers

一個很簡略的例子可能是這樣的:

//A Deferred takes in a function that will be passed a reference 
// to the Deferred object. This allows you to resolve or reject 
// it at some point in the future. 
var promise = $.Deferred(function(def){ 

    setTimeout(function(){ 

     def.resolve('Five seconds have passed!');  

    }, 5000); 

}).promise(); 

//This will only get executed when the 
// underlying Deferred gets resolved 
promise.done(function(msg){ 

    alert(msg); // Displays: 'Five seconds have passed!' 

}); 
+0

感謝,所以如果在推遲調用解析()將觸發完成的處理程序,OP中的代碼中完成的處理程序是什麼?這是我不明白的。在dfd.resolve – BrainLikeADullPencil

+0

@ user1647484之後似乎沒有任何事情發生 - 我還沒有看到代碼的其餘部分,所以我不太清楚,但我認爲這個想法似乎是,你會調用隱藏或顯示視圖和鏈回調它,這樣你可以保證在動畫完成後執行後續動作。 – Josh