Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Getting the sum of a collection (all models) with backbone.js

I'm just learning backbone. I have the following

window.ServerList = Backbone.Collection.extend({

    model: Server,

    cpuTotal: function(){
        if (!this.length) return 0;
        /* 
        * NOT SURE HOW TO SUM THEM 
        * this.get('cpu') is an integer for each of the collections
        */
        return this.get('cpu');
    }

});

I'm calling this from the render method of a view like this

 window.AppView = Backbone.View.extend({

     // ....

     render: function(){
         var total_cpu = ServerList.cpuTotal();
         var items = ServerList.length;

     }
 });

The variable total_cpu is always empty but items is always correct. Any ideas ?

I know my collection is working as I have plenty of items in there, but I need to add up all the CPU's from each item in the collection for the page summary.

For those who know the todos example http://documentcloud.github.com/backbone/docs/todos.html I have a very similar setup.

like image 538
32423hjh32423 Avatar asked Oct 11 '11 06:10

32423hjh32423


1 Answers

Here is the best way I know how:

cpuTotal: function() {
    return this.reduce(function(memo, value) { return memo + value.get("cpu") }, 0);
}

Here is a jsFiddle of the solution.

like image 136
Brian Genisio Avatar answered Oct 23 '22 20:10

Brian Genisio