this.subscribe和Template.instance()。subscribe不起作用

时间:2016-12-15 07:50:11

标签: meteor meteor-blaze

我正在使用Meteor 1.4。

Template.showProducts.onCreated(() => {
  var handle = Meteor.subscribe("products");
  //not working: var handle = this.subscribe("products");
  //not working: var handle = Template.instance().subscribe("products");

  Tracker.autorun(() => {
  //not working: this.autorun

    const isReady = Meteor.ready();
    //not working: this.subscriptionsReady()

    if(isReady){
      const products = Products.find().fetch();
      Session.set("prods", products);
    }
  });
});

如果我使用“this.subscribe”,我得到了:

  

未捕获的TypeError:_this.subscribe不是函数

如果我使用“Template.instance()”,我得到了:

  

无法读取属性'subscriptionsReady'为null

2 个答案:

答案 0 :(得分:2)

如果使用箭头功能,则Meteor尝试传入的this值将丢失。而是使用常规匿名函数(function () { ... })。

然后,您应该使用this.autorun而不是Tracker.autorun。这将确保在模板消失时清除自动运行,并允许Template.instance在自动运行内部工作。

答案 1 :(得分:2)

问题是你正在向onCreated处理程序传递一个箭头函数,该函数不允许绑定thisreference)。因此,Meteor无法正确绑定刚刚创建的模板实例,您的订阅(以及其他各种事情)将失败。

修复只是传递onCreated传统的JS函数:

Template.showProducts.onCreated(function () {
  ...