I have a model with several object:
//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"});
and also, I will add these friends object to a collection:
//Collection
Friends = Backbone.Collection.extend({
model: Friend,
});
Friends.add(f1);
Friends.add(f2);
Friends.add(f3);
and now I want to get a model according to the name of the Friend. I know that I can add an ID
attribute to achieve this. But I think there should have some more simple way to do this.
You can call
findWhere()
on Backbone collections, that will return exactly the model you are looking for.Example:
For simple attribute based searches you can use
Collection#where
:So if
friends
is yourFriends
instance, then:There's also
Collection#findWhere
(a later addition as noted in the comments):so if you're only after one then you can say things like:
Backbone collections support the underscorejs
find
method, so using that should work.The simplest way is to use "idAttribute" option of Backbone Model to let Backbone know the that you want to use "name" as your Model Id.
Now you can directly use Collection.get() method to retrieve a friend using his name. This way Backbone does not loop through all of your Friend models in the Collection but can directly fetch a model based on its "name".