2016-11-21 3 views
0

Voici mon modèle surCréé et fonction d'assistance. J'ai fourni des commentaires en ligne pour ajouter de la clarté. Je peux voir que self.post est finalement défini parce qu'il apparaît sur ma console lorsque je me connecte Template.instance(). Cependant, lorsque je consigne Template.instance(). Post, il est toujours indéfini. Edit: Je devrais ajouter, j'essaye d'éviter d'écrire la question deux fois parce que je l'emploie également dans les événements de modèle. (voir le code).Comment utiliser findOne dans Template onCreated et y accéder dans helper

+0

Reactivevar pourrait aider, sur le –

+0

meteorchef réactif findOne est réactif par défaut. –

Répondre

0

Cela ressemble à un problème de synchronisation. Vous êtes abonné à la publication onePost mais vous n'attendez pas que cet abonnement soit .ready() avant d'attribuer self.post Le autorun semble également superflu. Vous ne devriez pas avoir besoin de relancer ce bloc de code dans le bloc onCreated. Je suggère:

Template.default.onCreated(function() { 
    this.postId = FlowRouter.getParam('post_id'); 
    self.subscription = subscribe('onePost', this.postId); 
}); 
Template.default.helpers({ 
    poststage: function(stage) { 
    if (this.subscription.ready() ){ 
     return Posts.findOne(this.postId).stage; 
    } 
    } 
}); 
+0

Ok, oui, c'est comme ça que je l'aurais normalement fait, mais je réutilise la requête plus tard dans le code (dans les événements). Je pensais en fait à reformuler la question pour refléter cela (ce que je vais faire maintenant). La réponse peut être juste écrire Posts.findOne ... encore. Mais, je pensais pourquoi demander deux fois? –

+0

Les requêtes de minimongo sont relativement bon marché, souvent moins chères que de vous coder dans des coins en essayant de les optimiser. Vous pouvez également interroger le contexte de données dans le modèle contenant, puis vous obtenez le résultat de la requête dans 'this' –

+0

Ok, je vais juste interroger deux fois. Je vais laisser cette question ouverte et probablement reformuler un peu pour essayer de spécifier comment écrire une requête et l'utiliser dans Template onCreated, helpers et events. Le plus frustrant est que mon article est disponible dans console.log (Template.instance()); mais pas dans Template.instance(). post. Je sais qu'il devient disponible, mais il devrait être en train de se connecter quand il sera disponible ... eh bien ... –