Meteor 将 ReactiveVar 定义为在 .events 和 .helpers 中可访问



我正在尝试定义一个新的 ReactiveVar 变量,以便在所有模板部分中访问(例如.事件, .helpers, .render...等(,如下面的代码所示,但我总是收到错误:

Error: Exception in template helper:
ReferenceError: logData is not defined

有人可以告诉我我在这里错过了什么/做错了什么吗?谢谢

法典:

  Template.detailedreport.rendered = function() {
       var logData = new ReactiveVar;
       logData.set([]);
  };

  Template.detailedreport.helpers({
      myCollection: function () {
        return logData.get();
      }
  });
  Template.detailedreport.events({
     'submit form': function(e) {
        e.preventDefault();
        var now  = Session.get("startDate");
        var then = Session.get("endDate");
        var custID = Session.get("customer");
        var projID = Session.get("project");
        Meteor.call('logSummary', now, then, projID, custID, function(error, data){
          if(error)
            return alert(error.reason);
          logData.set(data);
        });
     }  
  });

您需要像这样定义模板实例上的ReactiveVar

Template.detailedreport.created = function() {
  this.logData = new ReactiveVar([]);
};

然后,您将能够在这样的帮助程序中访问它:

Template.detailedreport.helpers({
  myCollection: function () {
    return Template.instance().logData.get();
  }
});

在事件中,您可以使用 template 参数:

Template.detailedreport.events({
  'submit form': function(e, template) {
    e.preventDefault();
    var now  = Session.get("startDate");
    var then = Session.get("endDate");
    var custID = Session.get("customer");
    var projID = Session.get("project");
    Meteor.call('logSummary', now, then, projID, custID, function(error, data){
      if(error){
        return alert(error.reason);
      }
      template.logData.set(data);
    });
  }  
});

最新更新