2016-04-29 8 views
1

Ich bin nicht sicher, wie ich mein Problem angehen soll. Ob ich meine Variablen in meinem Event auf meine Spacebars-Syntaxfelder aus meiner Vorlage setzen oder meine zurückgegebenen Eventdaten irgendwie in meine Helfer weitergeben soll. Alles ist auch veröffentlicht und abonniert.Meteor - Übergabe von Daten zwischen Helfern, Ereignissen und Vorlagen

Problem: Ich versuche, Benutzer so zu konfigurieren, dass sie auf die Schaltfläche "Hinzufügen" neben den Personen in einer Verzeichnisliste (DirectoryList-Auflistung) klicken und diese Benutzerinformationen zu einer Kontaktlistengruppe hinzufügen können. Es ist einfach eine Messaging-App, wo eine Person ein Verzeichnis aller Personen scrollen und Benutzer zu ihrer Kontaktliste hinzufügen kann. Hier sind meine Dateien:

Vorlagen> directoryList.html

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

Helfer> directoryList.js

Template.directoryList.helpers({ 

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

}); 

Veranstaltungen> 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 
     }); 
    } 
}); 

seine offensichtlich wirft mir eine Fehler für die {{}} Syntax in meinem Fall, aber ich weiß nicht, was ich sonst noch machen soll oder wie ich das zum Laufen bekomme. Dachte, es könnte diese Felder von der Vorlage erben, aber ich denke nicht?

+0

Fragen sind einfacher zu beantworten, wenn Sie auf das Problem hinweisen. Welche Zeile wirft den Fehler auf und was wird auf die Konsole gedruckt? Wird "currentContact" auch korrekt abgerufen? –

+0

Ich entschuldige mich. Es zeigt keine Fehler in der Konsole oder der Eingabeaufforderung, im Grunde nur eine einfache Schaltfläche, die angeklickt wird, die nichts tut. Und nichts wird auf der Konsole gedruckt. Ich habe die console.log ("Test") als Test gedruckt, aber es wird nicht gedruckt. So weit wie currentContact ich_assumed_ es ist. Ich habe eine Sammlung namens DirectoryList, die veröffentlicht und abonniert wurde –

Antwort

0

Sie Ereignishandler ist für addButton Klasse, wo Sie Taste nicht addButton Klasse hat: Sie können Ihre Ereignishandler nach unten vereinfachen. Sie müssen ID in der Vorlage in der Klasse ändern.

Und Sie können andere Antwort folgen, um unnötige Abfrage zu vermeiden, um die Leistung zu verbessern.

Ich hoffe, es hilft.

+1

SIE SIND DIE BESTEN! so ein einfacher Fehler und es hat alles behoben. seit Tagen festgefahren. Danke Danke –

0

In Ihrem Event-Handler this enthält bereits den aktuellen Kontakt, Sie müssen nicht erneut nachschlagen.

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() 
     }); 
    } 
}); 
Verwandte Themen