请考虑以下代码:
Template.fullDoc.rendered = function() {
// Get triggered whenever the selected document id changes
this.autorun(function() {
var docId = isolateValue(function() {
return Template.currentData().selectedDoc._id;
});
...
});
}
Run Code Online (Sandbox Code Playgroud)
此代码不起作用.在里面isolateValue(),Template.currentData()有时会触发异常:( Exception from Tracker recompute function: Error: There is no current view这对应于Template.instance()返回的事实null).
那么如何在模板数据上下文的子部分设置反应依赖?
您可以isolateValue以不会导致有时Template.instance()设置的方式重新创建行为null.
$ meteor add reactive-var
Run Code Online (Sandbox Code Playgroud)
Template.fullDoc.rendered = function () {
var docIdVar = new ReactiveVar();
this.autorun(function () {
docIdVar.set(Template.currentData().selectedDoc._id);
});
this.autorun(function () {
var docId = docIdVar.get();
// ...
});
}
Run Code Online (Sandbox Code Playgroud)
这利用了将a设置为ReactiveVar已有的相同值的事实不会触发失效.(默认情况下,这仅适用于基元;对于对象,您需要equalsFunc在构造时传递自定义ReactiveVar.如果_id是字符串,则没问题.如果是,则ObjectID可能不是.)
| 归档时间: |
|
| 查看次数: |
554 次 |
| 最近记录: |