请考虑以下代码:
Template.fullDoc.rendered = function() {
// Get triggered whenever the selected document id changes
this.autorun(function() {
var docId = isolateValue(function() {
return Template.currentData().selectedDoc._id;
});
...
});
}
此代码无效。在isolateValue()
内,Template.currentData()
有时会触发例外:Exception from Tracker recompute function: Error: There is no current view
(这与Template.instance()
返回null
)相对应。
那么如何在模板数据上下文的子部分设置反应依赖?
答案 0 :(得分:6)
您可以通过某种方式重新创建isolateValue
行为,有时不会导致Template.instance()
设置为null
。
$ meteor add reactive-var
Template.fullDoc.rendered = function () {
var docIdVar = new ReactiveVar();
this.autorun(function () {
docIdVar.set(Template.currentData().selectedDoc._id);
});
this.autorun(function () {
var docId = docIdVar.get();
// ...
});
}
这利用了将ReactiveVar
设置为已有的相同值的事实不会触发失效。 (默认情况下,这仅适用于基元;对于对象,在构造equalsFunc
时,您需要传递自定义ReactiveVar
。如果_id
是字符串,则您可以使用#{1}}。好的。如果它ObjectID
你可能不是。)