Getting each model from a Backbone Collection
Solution 1
First method: use the models
property of your collection:
var myModel
for(var i=0; i<myCollection.length; i++) {
myModel = myCollection.models[i];
}
Second method is with the each
method:
myCollection.each(function(model, index, [context]) {...});
Solution 2
Iterating over every model of a collection eg. as give by backbone.js is
books.each(function(book) {
book.publish();
});
In your case it should be something like this
collection_var.each(function(paintThing){
console.log(paintThing);
var thing_type = this.model.get("type"),
thing_other = this.model.get("otherAttribute");
console.log(paintThing);
console.log(thing_type);
console.log(thing_other);
});
http://backbonejs.org/#Collection-Underscore-Methods
Comments
-
streetlight almost 2 years
I'm convinced this is a very easy fix, but none of the posts I've found so far seem to have addressed this directly: how do I loop over a collection to get each model?
The first method I'm trying to use is underscore's each method. Here is my call and function:
collection_var.each(paintThings);
and here is my function:
function paintThings() { console.log(this); console.log(this.model); var thing_type = this.model.get("type"), thing_other = this.model.get("otherAttribute"); console.log(this.model); console.log(thing_type); console.log(thing_other); }
Right now, this comes out as undefined, and this.model errors:
Uncaught TypeError: Cannot read property 'model' of undefined
I know the answer is simple, but it's driving me crazy! I'm new to underscore. Can anyone here help? I'm also open to other non-underscore methods if they are faster/better.
I also tried this:
for (var i = 0, l = collection_var.length; i < l; i++) { console.log(collection_var[i]); }
but that's not giving me what I want either.