2013-06-10 11 views
6

Ziel: Ich versuche, eine Groß- und Kleinschreibung Suche zu erstellen, die meine Sammlung durchläuft und versucht, die Benutzerabfrage gegen Modell des Namensattribut übereinstimmen. Wenn ich jetzt ein bestimmtes Modell finden möchte, muss die Suchanfrage genau sein.Wie funktioniert map mit einer Backbone-Sammlung?

Es scheint, dass es keine einfache Möglichkeit, etwas so einfach in Backbone zu tun, nicht aus dem Kasten heraus. Die Funktion map kam mir in den Sinn. Was wäre, wenn ich die gesamte Sammlung durchgehen und das Namensattribut des Modells in Kleinbuchstaben ändern könnte, dann die Benutzerabfrage in Kleinbuchstaben ändern und voila!

Aber das Problem ist, ich habe keine Ahnung, wie Backbone-Sammlung verwenden und map Funktion. Es gibt keine Dokumentation über map in Backbone-Dokumentation, andere als ein Link, den Sie die Dokumentation mit einem super einfachen Beispiel-Code unter Verwendung eine Anordnung von drei Zahlen zu unterstreichen führt.

Das funktioniert nicht ... warum?

this.collection.map(function(model) { 
    return model.get('name').toLowerCase(); 
}); 

Antwort

8

Tatsächlich werden alle Sammlungsmethoden des Unterstrichs auf Backbone.Collection-Objekte weitergeleitet. Wenn Sie eine collection.map(... tun, wird ein Array von Objekten zurückgegeben, die von der zugeordneten Funktion zurückgegeben werden. Die Lösung von raina77ow präsentiert funktioniert nicht, da ein Backbone.Collection kein Array ist und die Zuordnung des Ergebnisses der Karte zu this.collection wird die Sammlung selbst zerstören.

Wenn Sie eine Sammlung filtern wollen, würde ich empfehlen die filter Methode. (Ich nehme an, Sie arbeiten von einem Backbone.View.

var filter = this.$('#search-field').val(), 
    filteredModels = this.collection.filter(function(model) { 
    return model.get('name').toLowerCase() === filter; 
}; 
this.collection.reset(filteredModels); 

Beachten Sie, dass jeder Proxy Methoden der Unterstrich auf Sammlungen werden eine Reihe von Modellen zurück, wenn Sie sie dann verwenden möchten, können Sie die Sammlung mit diesen Modellen zurückgesetzt oder Entsprechendes gilt für das Attribut "models" der Sammlung für die gefilterten Ergebnisse: this.collection.models = filteredModels Das erste Formular hat den Vorteil, dass das Ereignis reset für die Sammlung ausgelöst wird, auf der Sie Ihre Ansicht anhören und z. B. Ihre Ansicht erneut rendern können.

Verwandte Themen