2016-04-18 5 views
0

Ich möchte globale Funktion erstellen, um ein Element aus meiner Sammlung in Meteor zu entfernen.Meteor: Entfernen ist keine Funktion

Mein Code:

Template.adminLayout.events({ 
    'click .delete': function(e) { 

     var collection = $(e.target).data('collection'), 
      redirect = $(e.target).data('redirect'), 
      id = this._id; 

     // Remove request 
     collection.remove(id); 

     // Redirect 
     Router.go(redirect); 

    } 
}); 

Mit collection.remove(id), bekomme ich diesen Fehler:

collection.remove is not a function

Wenn ich mit Messages (Name meiner Sammlung) testen Messages.remove(id), es funktioniert.

Haben Sie eine Idee, warum mein Code nicht funktioniert?

+0

Wenn Sie 'collection' in einem Debugger oder über die Konsole untersuchen, was ist der Typ? – Jamiec

+0

Hallo Jamiec. Sammlung Rückgabe "Zeichenfolge". –

+0

Nun, das ist deine Antwort. Ein String in Javascript enthält keine Funktion 'remove'! Die nächste Frage ist also: Wie bevölkern Sie '.data ('collection')'? – Jamiec

Antwort

2

Ihr collection Parameter ist eine Zeichenfolge mit dem Auflistungsname, nicht die Auflistung. Sie benötigen das tatsächliche Auflistungsobjekt, um Datenoperationen auszuführen. Wenn Sie auf die Sammlung nach Namen zugreifen möchten, müssen Sie selbst ein Wörterbuch erstellen. Zum Beispiel:

Collections = {}; 

Collections['Documents'] = Documents = new Mongo.Collection('documents'); 

Dann Sie es in Ihrem Ereignishandler verwenden können:

var collection = Collections[$(e.currentTarget).data('collection')]; 

By the way, ist es empfehlenswert, e.currentTarget statt e.target zu verwenden. Sie erhalten immer das Element, das Sie erwarten, während e.target einer seiner Nachkommen sein kann.