Backbone.js: render only last model in collection, display total number of models

backbone.js, javascript

Solution

Get the last model from the collection using `at()`:

// this.collection.length - 1 is the index of the last model in the collection
var last_model = this.collection.at(this.collection.length - 1);

Your `render()` function would then look something like this:

render: function(){
    var last_model = this.collection.at(this.collection.length - 1);
    this.renderThing(last_model);
}

Get the total number of models in the collection using the `length` property:

var total = this.collection.length;

Edited to add that Backbone offers a `last()` method on each collection, courtesy of Underscore JS (thanks to @RocketR for pointing this out). So, the above could more easily be written as follows:

var last_model = this.collection.last();

Problem

I have a basic backbone.js app that renders a collection of models. I would like to modify to render only the last model, and also display a number for the total number of models. Here is my code so far: ``` var Thing = Backbone.Model.extend({ }); var ThingView = Backbone.View.extend({ el: $('body'), template: _.template('<h3><%= title %></h3>'), render: function(){ var attributes = this.model.toJSON(); this.$el.append(this.template(attributes)); } }); var ThingsList = Backbone.Collection.extend({ model: Thing }); var things = [ { title: "Macbook Air", price: 799 }, { title: "Macbook Pro", price: 999 }, { title: "The new iPad", price: 399 }, { title: "Magic Mouse", price: 50 }, { title: "Cinema Display", price: 799 } ]; var thingsList = new ThingsList(things); var ThingsListView = Backbone.View.extend({ el: $('body'), render: function(){ _.each(this.collection.models, function (things) { this.renderThing(things); }, this); }, renderThing: function(things) { var thingView = new ThingView({ model: things }); this.$el.append(thingView.render()); } }); var thingsListView = new ThingsListView( {collection: thingsList} ); thingsListView.render(); ```

Original source