Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

How to find a model from a collection according to some attribute other than the ID?

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.

like image 695
Anar Avatar asked Jan 20 '13 00:01

Anar


2 Answers

For simple attribute based searches you can use Collection#where:

where collection.where(attributes)

Return an array of all the models in a collection that match the passed attributes. Useful for simple cases of filter.

So if friends is your Friends instance, then:

var lees = friends.where({ name: 'Lee' }); 

There's also Collection#findWhere (a later addition as noted in the comments):

findWhere collection.findWhere(attributes)

Just like where, but directly returns only the first model in the collection that matches the passed attributes.

so if you're only after one then you can say things like:

var lee = friends.findWhere({ name: 'Lee' }); 
like image 159
mu is too short Avatar answered Oct 20 '22 04:10

mu is too short


Backbone collections support the underscorejs find method, so using that should work.

things.find(function(model) { return model.get('name') === 'Lee'; }); 
like image 37
Jani Hartikainen Avatar answered Oct 20 '22 04:10

Jani Hartikainen