在Meteor中,如何设置模板数据上下文的子部分的反应依赖?

ste*_*643 4 meteor

请考虑以下代码:

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).

那么如何在模板数据上下文的子部分设置反应依赖?

use*_*348 6

您可以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可能不是.)