2016-12-15 4 views
0

Meteor 1.4를 사용하고 있습니다.this.subscribe 및 Template.instance(). subscribe가 작동하지 않습니다.

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"를 사용하는 경우, 내가 가지고 :

Uncaught TypeError: _this.subscribe is not a function

나는 "Template.instance()"를 사용하는 경우, 내가 가지고 :

Cannot read property 'subscriptionsReady' of null

답변

2

당신이 사용하는 경우 화살표 기능을 사용하면 Meteor가 전달하려고 시도하는 this의 값이 손실됩니다. 대신 일반 익명 함수 (function() { ... })를 사용하십시오.

그런 다음 Tracker.autorun 대신 this.autorun을 사용해야합니다. 이렇게하면 템플릿이 사라질 때 자동 실행이 정리되고 자동 실행에서 Template.instance이 작동하도록 할 수 있습니다.

2

onCreated 처리기에 this (reference)의 바인딩을 허용하지 않는 화살표 함수를 전달하는 것이 문제입니다. 결과적으로, Meteor는 방금 작성한 템플리트 인스턴스를 올바르게 바인딩 할 수 없으며 등록 (및 기타 여러 가지)이 실패합니다.

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

수정은 전통적인 JS 기능 onCreated를 전달하는