Backbone.js: How to get the index of a model in a Backbone Collection?

brian h picture brian h · Sep 19, 2011 · Viewed 45.9k times · Source

Is there a way to find the index of a model within a collection?

Let's say in a view we have a model we're working on, could that model spit out it's index within the collection it's currently inside of? I'd like to do this because I want to access the model above or below the current target.

In other words is there something like:

index = this.model.index
modelAbove = this.collection.at( index-1 )

My data is a nested set so I can just do a search on the "lft" or "rgt" columns, but I didn't want to reinvent the wheel if Backbone already has this info available.

Answer

Derick Bailey picture Derick Bailey · Sep 19, 2011

yes, backbone provides access to many underscore.js methods on models and collections, including an indexOf method on collections. it also provides an at method like you've shown.

var index = this.collection.indexOf(this.model);
var modelAbove = this.collection.at(index-1);