2016-04-29 1 views
1

Je ne sais pas comment aborder mon problème. Si je devrais définir mes variables dans mon événement à mes champs de syntaxe de la barre d'espace à partir de mon modèle ou transmettre mes données d'événement retourné dans mes aides en quelque sorte. Tout est publié et souscrit correctement aussi. Problème: J'essaie de faire en sorte que les utilisateurs puissent cliquer sur un bouton "Ajouter" à côté de l'une des personnes dans une liste de répertoires (collection DirectoryList) et que les informations sur les utilisateurs soient ajoutées à une liste de contacts. C'est simplement une application de messagerie où une personne peut faire défiler un répertoire de tout le monde et ajouter des utilisateurs à leur liste de contacts. Voici mes fichiers:Meteor - Passer des données entre les assistants, les événements et les modèles

modèles> directoryList.html

<template name="directoryList"> 
    {{> searchDirectory}} 
    <ul> 
     {{#each directoryList}} 
      <li> 
       {{firstname}} {{lastname}} &nbsp; <button name="addFriend" id="addFriend">Add</button> 
      </li> 
     {{/each}} 
    </ul> 
</template> 

> Aides directoryList.js

Template.directoryList.helpers({ 

    'directoryList': function(){ 
     return DirectoryList.find({}, {sort: {createdAt: -1}}); 
    } 

}); 

événements> directoryList.js

Template.directoryList.events({ 

    'click .addFriend': function(event){ 
     event.preventDefault(); 

     var currentUserId = Meteor.userId(); 
     var currentContact = DirectoryList.findOne(this._id); 
     var currentContactFirstname = currentContact.firstname; 
     var currentContactLastname = currentContact.lastname; 
     var currentContactEmail = currentContact.email; 
     console.log("test"); 

     ContactsList.insert({ 
      firstname: currentContactFirstname, 
      lastname: currentContactLastname, 
      email: currentContactEmail, 
      createdBy: currentUserId 
     }); 
    } 
}); 

its me jeter évidemment un erreur pour la syntaxe {{}} dans mon événement mais je ne sais pas quoi faire d'autre ou comment faire fonctionner ceci. Pensé qu'il pourrait être en mesure d'hériter du modèle de ces champs, mais je suppose que non?

+0

Les questions sont plus faciles à répondre lorsque vous pointez directement sur le problème. Quelle ligne renvoie l'erreur et qu'est-ce qui est imprimé sur la console? En outre, 'currentContact' est-il récupéré correctement? –

+0

Je m'excuse. Il ne montre aucune erreur dans la console ou l'invite de commande, fondamentalement juste un bouton simple cliqué qui ne fait rien. Et rien n'est imprimé sur la console. J'ai le console.log ("test") pour être imprimé comme un test mais il n'est pas imprimé. En ce qui concerne le contact actuel, je l'ai _assumé_. J'ai une collection appelée DirectoryList qui est publiée et souscrite à –

Répondre

0

gestionnaire d'événements est pour vous addButton classe, où le bouton ne dispose pas des addButton classe. Vous devez changer l'identifiant en classe dans votre modèle.

<template name="directoryList"> 
    {{> searchDirectory}} 
    <ul> 
     {{#each directoryList}} 
      <li> 
       {{firstname}} {{lastname}} &nbsp; <button name="addFriend" class="addFriend">Add</button> <!-- CHANGED ID TO CLASS FOR THIS BUTTON --> 
      </li> 
     {{/each}} 
    </ul> 
</template> 

Et vous pouvez suivre d'autres réponses pour éviter toute requête inutile pour améliorer les performances.

Espérons que ça aide.

+1

VOUS ÊTES LE MEILLEUR! une telle erreur simple et tout fixé. été coincé là-dessus pendant des jours. Merci merci –

0

Dans votre gestionnaire d'événements this contient déjà le contact actuel, vous n'avez pas besoin de le rechercher à nouveau. Vous pouvez simplifier votre gestionnaire d'événements jusqu'à:

Template.directoryList.events({ 

    'click .addFriend': function(event){ 
     event.preventDefault(); 
     console.log(this); 

     ContactsList.insert({ 
      firstname: this.firstname, 
      lastname: this.lastname, 
      email: this.mail, 
      createdBy: Meteor.userId() 
     }); 
    } 
});