0

我正在实例化一个新的 ReactiveVar:

Template.myTemplate.onCreated(function() {
   this.var1 = new ReactiveVar(0);
}

当用户选择新的年份值时,我有一个 Tracker.autorun 强制重新运行:

Template.myTemplate.onRendered(function() {
  Tracker.autorun(function() {
  var year = Session.get('chartYear').toString(); // This session is from another template
  // Do stuff 
  ...
  Template.instance().var1.set(new data);
  }
}

我的助手重新运行该功能:

Template.myTemplate.helpers({
  function1: function () {
    return Template.instance().var1.get();
}

不知道发生了什么,但是当第一次选择年份值时,一切运行正常。但是当用户选择一个新的年份值时,一个 TypeError 的结果:

"TypeError: null is not an object (evaluating 'Template.instance().var1')"

但是,如果我用 Sessions 替换 ReactiveVars,当用户选择不同的年份值时,一切正常。有人可以帮忙吗?

4

1 回答 1

1

目前尚不清楚哪一行引发了该错误(如果以下内容不适用,则发布完整的错误,指示这是来自帮助程序还是 onRendered 事件等)。

但是我怀疑这是来自Template.onRendered事件,它要求您从this对象访问模板实例,就像您在Template.onCreated事件中一样。

因此,尝试将您的onRendered功能更改为:

Template.myTemplate.onRendered(function() {
  templateInstance = this;
  Tracker.autorun(function() {
    var year = Session.get('chartYear').toString(); // This session is from another template
    // Do stuff 
    ...
    templateInstance.var1.set(newData);
  }
}
于 2016-12-05T21:22:25.573 回答