我正在阅读探索流星书,我坚持第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()”在这段代码中做了什么。此代码中展示了哪些类型的功能?它或多或少地掩盖在书中,我很难找到一个解释,使得发送文档。
答案 0 :(得分:0)
Meteor中的事物是被动的 - 这意味着当数据中的值发生变化时,所有依赖于该值的事物都会重新计算。
为了使这成为可能,这样的事情必须知道它依赖于哪个值。通过设置依赖关系来跟踪。换句话说,如果你想让事情自动重新计算,依赖关系是你需要使用的低级机制。
您发布的代码中有三条重要的行:
var _currentLikeCountListeners = new Deps.Dependency();
这将创建一个新的依赖项对象,用于跟踪_currentLikeCount
更改。
_currentLikeCountListeners.depend();
此方法用于反应函数,使该函数侦听依赖性。因此,只要依赖项发生更改,就会重新计算函数。请注意,并非所有函数都是反应函数 - 它需要被称为“反应计算”。一开始不要担心,只需注意模板助手即可。
_currentLikeCountListeners.changed();
这是触发此重新计算的实际行。