Ich habe ein Modell mit mehreren Objekten:
//Model
Friend = Backbone.Model.extend({
//Create a model to hold friend attribute
name: null,
});
//objects
var f1 = new Friend({ name: "Lee" });
var f2 = new Friend({ name: "David"});
var f3 = new Friend({ name: "Lynn"});
außerdem werde ich diese Freunde-Objekte zu einer Sammlung hinzufügen:
//Collection
Friends = Backbone.Collection.extend({
model: Friend,
});
Friends.add(f1);
Friends.add(f2);
Friends.add(f3);
und jetzt möchte ich ein modell nach dem namen des freundes bekommen. Ich weiß, dass ich ein ID
Attribut hinzufügen kann, um dies zu erreichen. Aber ich denke, es sollte einen einfacheren Weg geben, dies zu tun.
Backbone-Sammlungen unterstützen die Methode underscorejs find
, daher sollte dies funktionieren.
things.find(function(model) { return model.get('name') === 'Lee'; });
Für einfache Suche nach Attributen können Sie Collection#where
verwenden:
wobei
collection.where(attributes)
Gibt ein Array aller Modelle in einer Auflistung zurück, die den übergebenen Attributen entsprechen. Nützlich für einfache Fälle von
filter
.
Wenn also friends
Ihre Friends
Instanz ist, dann:
var lees = friends.where({ name: 'Lee' });
Es gibt auch Collection#findWhere
(eine spätere Ergänzung, wie in den Kommentaren vermerkt):
findWhere
collection.findWhere(attributes)
Genau wie where, gibt jedoch direkt nur das erste Modell in der Auflistung zurück, das den übergebenen Attributen entspricht.
wenn Sie also erst nach eins sind, können Sie Dinge sagen wie:
var lee = friends.findWhere({ name: 'Lee' });
Am einfachsten ist es, die Option "idAttribute" des Backbone-Modells zu verwenden, um Backbone mitzuteilen, dass Sie "name" als Modell-ID verwenden möchten.
Friend = Backbone.Model.extend({
//Create a model to hold friend attribute
name: null,
idAttribute: 'name'
});
Jetzt können Sie die Collection.get () -Methode direkt verwenden, um einen Freund anhand seines Namens abzurufen. Auf diese Weise durchläuft Backbone nicht alle Friend-Modelle in der Sammlung, sondern kann ein Modell anhand seines "Namens" direkt abrufen.
var lee = friends.get('Lee');
Sie können findWhere()
für Backbone-Sammlungen aufrufen, wodurch genau das Modell zurückgegeben wird, nach dem Sie suchen.
Beispiel:
var lee = friends.findWhere({ name: 'Lee' });