2014-06-28 96 views
1

我正在通過探索流星書,我卡上的例子,從第137頁流星.depends()方法

var _currentLikeCount = 0; 
var _currentLikeCountListeners = new Deps.Dependency(); 


currentLikeCount = function() { 
_currentLikeCountListeners.depend(); 
return currentLikeCount; 
} 

Meteor.setInterval(function() { 
var postId; 
    if (Meteor.user() && postId = Session.get('currentPostId')) { 
    getFacebookLikeCount(Meteor.user(), Posts.find(postId), 
    function(err, count) { 
    if (!err && count !== _currentLikeCount) { 
    _currentLikeCount = count; 
    _currentLikeCountListeners.changed(); 
} 
}); 
} 
}, 5 * 1000); 

我有一個很難理解什麼叫「Deps.Dependency( )「和」depend()「在這個代碼中正在執行。這段代碼展示了哪些類型的功能?這本書或多或少地被掩蓋在書中,我很難找到解釋,使文檔發送。

回答

0

流星中的東西是被動的 - 這意味着當數據中的值發生變化時,所有依賴於該值的東西都會重新計算自己。

要做到這一點,這種事情必須知道它依賴於哪個值。這通過設置依賴關係來跟蹤。換句話說,如果您想自動重新計算自己,Dependencies是您需要使用的底層機制。

有在代碼中三個重要的線,你已經發布:

var _currentLikeCountListeners = new Deps.Dependency(); 

這將創建一個將用於跟蹤_currentLikeCount變化的新的依賴對象。

_currentLikeCountListeners.depend(); 

此方法用於響應函數,使該函數偵聽依賴關係。所以,只要依賴關係發生變化,函數就會重新計算。請注意,並非所有函數都是被動函數 - 它需要被稱爲「被動計算」。一開始不要擔心,只要注意模板助手都可以。

_currentLikeCountListeners.changed(); 

這是觸發此重新計算的實際行。