【发布时间】:2015-07-16 12:06:34
【问题描述】:
我正在阅读tracker manual 并且很难理解某些内容。
我了解dependency.changed() 将使依赖项中的所有计算无效,从而导致跟踪器重新运行。
但是为什么 Meteor 在失效时会从依赖中删除计算呢?
例如,这是手册中的 Tracker 示例:
Dependency.prototype.depend = function () {
var self = this;
if (Tracker.currentComputation) {
var id = self._nextId++;
self._dependents[id] = Tracker.currentComputation;
Tracker.currentComputation.onInvalidate(function () { # Here
delete self._dependents[id]; # Here
}); # Here
}
};
Dependency.prototype.changed = function () {
for (var id in this._dependents) {
this._dependents[id].invalidate();
}
};
为什么我们要添加Tracker.currentComputation.onInvalidate() 回调来从依赖项中删除计算?对我来说似乎没有必要。
我想完全理解这一点。有什么想法吗?
【问题讨论】:
-
我认为使计算无效会导致它重新运行,因此它很可能会再次注册依赖项。在某些情况下可能不会,在这种情况下,出于性能原因,我们希望清除依赖项。
标签: javascript meteor meteor-tracker