2016-11-20 2 views
0

J'ai ce codePourquoi l'habitude de mon aide retourner quoi que ce soit utile - Il undefined

/* Template Helpers Start */ 
    Template.ParticipationList.helpers({ 
     getAllParticipants: function(){ 
     var activityid = this._id; 

     Meteor.call('participation.findParticipants', activityid, function(error, result){ 
      if(error){ 
       console.log(error) 
      } 
      return result; 
     }); 

     } 
    }); 

Si je place le tableau et le mot-clé de retour en dehors de l'appel d'étoiles filantes, toutes les choses sont très bien - il lie les noms le gabarit. MAIS quand est ce qui précède, rien ne se lie au modèle. Je pense que ça a quelque chose à voir avec l'async ... Mais qu'est-ce que je fais de mal?

MISE À JOUR

<ul> 
    {{#each getAllParticipants}} 
     {{name}} 
    {{/each}} 
</ul> 
+0

A [question presque identique] (http://stackoverflow.com/questions/40703704/meteor-helpers-return-nothing) a été demandé seulement il y a quelques heures. – MasterAM

+0

Donc, il n'y avait pas de solution au problème. On a dit que c'était une question de cadrage, mais aucune solution n'a été donnée. –

+0

Pas vraiment. Tout se résume à votre conception. Il n'y a pas beaucoup d'utilité à avoir un appel de méthode par appel d'aide. Si vous devez exécuter un calcul pour obtenir un état, il existe probablement de meilleures façons de le faire. Les méthodes n'ont pas été conçues pour la récupération de données. Si vous voulez le faire, vous pouvez faire en sorte que le calcul remplisse un dictionnaire réactif lié au modèle, par exemple. – MasterAM

Répondre

1

Le "résultat" ne sera pas dans les données. Ceci est une programmation asynchrone régulière. Que voulez-vous faire avec vos données? Vous pouvez le mettre dans une variable réactive pour les autres parties de votre application à utiliser.

Meteor.call('myMethod', functoin(error, result){ 
    if(error){ 
    alert('Error'); 
    }else{ 
    Session.set("data", result) 
    } 
}); 

Je suppose que vous voulez afficher des documents provenant d'une collection disent participants

Vous pouvez que créer une publication permettant à certains champs.

par exemple

Meteor.publish('allPartipants', function() { 
    return Listings.find(
    {type: 'actors'}, 
    {fields: { name: 1, age: 1} } 
); 
}); 

Abonnement être comme:.

Meteor.subscribe('allPartipants'); 

et aide il vous suffit d'appeler la collection avec find() fetch() comme suit.

Template.templatName.helpers({ 
    allParticipants(){ 
    Participants.find().fetch() 
    } 
}) 

et votre code html comme vous l'avez mentionné

<ul> 
    {{#each allParticipants}} 
     {{name}} 
    {{/each}} 
</ul> 
+0

Je voudrais retourner le résultat, afin que je puisse lier les données au modèle. Voir la mise à jour ci-dessus pour le balisage du modèle. –

+0

vous devriez probablement vous abonner à la collection et ne publier que les données requises. et que, au lieu de faire meteor.call jst faire Participants.find(). fetch() vous ne pouvez pas être en mesure d'ID d'activité, sauf si vous avez chacun une certaine portée de données. –

+0

Oui, cela fonctionnera je suppose. Merci –