2011-10-11 34 views
8

Tôi chỉ đang học về xương sống. Tôi có sauLấy tổng của một bộ sưu tập (tất cả các mô hình) với backbone.js

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'); 
    } 

}); 

Tôi gọi này từ render phương pháp của một cái nhìn như thế này

window.AppView = Backbone.View.extend({ 

    // .... 

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

    } 
}); 

Biến total_cpu luôn là rỗng nhưng mục luôn là đúng. Bất kỳ ý tưởng?

Tôi biết bộ sưu tập của mình đang hoạt động vì tôi có nhiều mục trong đó, nhưng tôi cần phải thêm tất cả các CPU từ mỗi mục trong bộ sưu tập cho tóm tắt trang.

Đối với những người biết ví dụ về todos http://documentcloud.github.com/backbone/docs/todos.html Tôi có thiết lập rất giống nhau.

Trả lời

18

Dưới đây là cách tốt nhất mà tôi biết làm thế nào:

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

Đây là một jsFiddle of the solution.

+1

+1 cho mục đích và cho những người quan tâm đến tài liệu: http: //documentcloud.github. com/gạch dưới/# giảm –

4

Tôi tin rằng vấn đề của bạn là "điều này" có thể hoặc không thể giới thiệu trường hợp bộ sưu tập của bạn, tùy thuộc vào việc bạn có bị mất ràng buộc hay không (ví dụ: nếu cpuTotal được chuyển làm đối số trong cuộc gọi hàm). Bạn có thể thay đổi liên kết bộ sưu tập với hàm cpuTotal trong hàm khởi tạo. Tôi chưa thử nghiệm điều này, nhưng hãy thử nó (kudo để @Brian đề xuất giảm):

window.ServerList = Backbone.Collection.extend({ 

    model: Server, 

    initialize: function() { 
     _.bind(this.cpuTotal, this); // From Underscore.js 
    }, 

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

}); 
Các vấn đề liên quan