J'ai un modèle avec plusieurs objets:
//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"});
et aussi, j'ajouterai ces objets amis à une collection:
//Collection
Friends = Backbone.Collection.extend({
model: Friend,
});
Friends.add(f1);
Friends.add(f2);
Friends.add(f3);
et maintenant je veux obtenir un modèle selon le nom de l'ami. Je sais que je peux ajouter un attribut ID
pour y parvenir. Mais je pense qu'il devrait y avoir un moyen plus simple de le faire.
Les collections de backbone prennent en charge la méthode underscorejs find
, donc son utilisation devrait fonctionner.
things.find(function(model) { return model.get('name') === 'Lee'; });
Pour les recherches basées sur des attributs simples, vous pouvez utiliser Collection#where
:
où
collection.where(attributes)
Renvoie un tableau de tous les modèles d'une collection qui correspondent aux attributs passés . Utile pour les cas simples de
filter
.
Donc, si friends
est votre instance Friends
, alors:
var lees = friends.where({ name: 'Lee' });
Il y a aussi Collection#findWhere
(un ajout ultérieur comme indiqué dans les commentaires):
findWhere
collection.findWhere(attributes)
Tout comme où, mais ne renvoie directement que le premier modèle de la collection qui correspond aux attributs passés .
donc si vous n’êtes qu’après, vous pouvez dire des choses comme:
var lee = friends.findWhere({ name: 'Lee' });
Le moyen le plus simple consiste à utiliser l'option "idAttribute" du modèle Backbone pour indiquer à Backbone que vous souhaitez utiliser "name" comme identifiant de modèle.
Friend = Backbone.Model.extend({
//Create a model to hold friend attribute
name: null,
idAttribute: 'name'
});
Vous pouvez maintenant utiliser directement la méthode Collection.get () pour récupérer un ami en utilisant son nom. De cette façon, Backbone ne passe pas en boucle dans tous vos modèles Friend de la collection, mais peut directement récupérer un modèle en fonction de son "nom".
var lee = friends.get('Lee');
Vous pouvez appeler findWhere()
sur les collections Backbone, qui renverra exactement le modèle que vous recherchez.
Exemple:
var lee = friends.findWhere({ name: 'Lee' });