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

时间:2015-02-19 11:34:10

标签: 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; 
        });
        ...

    });

}

此代码无效。在isolateValue()内,Template.currentData()有时会触发例外:Exception from Tracker recompute function: Error: There is no current view(这与Template.instance()返回null)相对应。

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

1 个答案:

答案 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你可能不是。)