2016-12-18 2 views
2

У меня есть этот код,получить Meteor.subscribe в обратном вызове

Meteor.subscribe('getOrgDetail', {status:'active'},function(){ 
     var sub = this; 
     self.setState({'subscriptions.orgs':sub{id:Organizations.find().fetch()}); 
    }); 

Я использую это, чтобы получить Meteor.subscribe в обратном вызове. Но это не работает. Есть ли другой способ setState подписки?

ответ

1

Похоже, вы путаете вещи. Вам в основном нужен только объект подписки, если вы хотите сделать подписку на .stop().

Когда последний аргумент .subscribe() является функцией, он интерпретируется как обратный вызов onReady().

Контекст обратного вызоване будет объектом подписки. Это будет какой-то контекст владения, в котором функция вызывается, как обычно в Javascript. А в случае подписки на Meteor onReady callback это не определено.

Таким образом, в обратном вызове вы не можете положиться на this, только на переменные, которые у вас есть в области или закрытии (например, ваш self).

Если вы хотите сделать .find(), когда подписка будет готова, вам нужно установить флаг состояния, сигнализирующий об этом, а затем иметь функцию, которая зависит от значения этого флага состояния, который делает .find()коллекция объект, а не объект подписки.

self.setState({ getOrgDetailReady: true }); 

затем в одном из методов жизненного цикла, которые работают при изменении состояния (который один зависит от кода ...) вы делаете:

if(this.state.getOrgDetailReady) { 
    let orgDetails = orgDetailCollection.find().fetch(); 
    ... 
} 
+0

Как я могу установить государственный флаг для выполнения функции если подписка готова? – JMA

+0

Я привел пример этого в конце ответа. –