我正在使用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
答案 0 :(得分:2)
如果使用箭头功能,则Meteor尝试传入的this
值将丢失。而是使用常规匿名函数(function () { ... }
)。
然后,您应该使用this.autorun
而不是Tracker.autorun
。这将确保在模板消失时清除自动运行,并允许Template.instance
在自动运行内部工作。
答案 1 :(得分:2)
问题是你正在向onCreated
处理程序传递一个箭头函数,该函数不允许绑定this
(reference)。因此,Meteor无法正确绑定刚刚创建的模板实例,您的订阅(以及其他各种事情)将失败。
修复只是传递onCreated
传统的JS函数:
Template.showProducts.onCreated(function () {
...