Meteor .depends()方法

时间:2014-06-28 23:50:53

标签: javascript meteor

我正在阅读探索流星书,我坚持第137页的例子

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()”在这段代码中做了什么。此代码中展示了哪些类型的功能?它或多或少地掩盖在书中,我很难找到一个解释,使得发送文档。

1 个答案:

答案 0 :(得分:0)

Meteor中的事物是被动的 - 这意味着当数据中的值发生变化时,所有依赖于该值的事物都会重新计算。

为了使这成为可能,这样的事情必须知道它依赖于哪个值。通过设置依赖关系来跟踪。换句话说,如果你想让事情自动重新计算,依赖关系是你需要使用的低级机制。

您发布的代码中有三条重要的行:

var _currentLikeCountListeners = new Deps.Dependency();

这将创建一个新的依赖项对象,用于跟踪_currentLikeCount更改。

_currentLikeCountListeners.depend();

此方法用于反应函数,使该函数侦听依赖性。因此,只要依赖项发生更改,就会重新计算函数。请注意,并非所有函数都是反应函数 - 它需要被称为“反应计算”。一开始不要担心,只需注意模板助手即可。

_currentLikeCountListeners.changed();

这是触发此重新计算的实际行。