2012-09-27 27 views
5

Tôi có một số Marionette.CompositeView cần hiển thị bộ sưu tập.
Tôi muốn lọc bộ sưu tập này theo hành động fetchadd.
Tôi đã thử với mã sau (1) nhưng tôi nhận được lỗi sau (2).Cách thích hợp để lọc backbone.collection bằng cách sử dụng Marionette.CompositeView

Bất kỳ ý tưởng nào, cảm ơn.


(1)

var myCompositeView = Marionette.CompositeView.extend({ 

    initialize: function() { 
     this.collection = app.taskCollection.where({type: 'todo'}); 
    } 

}); 

(2)

// Uncaught TypeError: Object has no method 'on' 

Trả lời

8

CompositeView và CollectionView rối của cả hai mong đợi các thiết lập collection là một Backbone.Collection hợp lệ. Phương thức where trong bộ sưu tập Backbone không trả về Backbone.Collection, nó trả về một mảng. Vì vậy, bạn phải quấn một bộ sưu tập xung quanh các kết quả:


initialize: function(){ 
    var filtered = app.taskCollection.where({type: 'todo'}); 
    this.collection = new Backbone.Collection(filtered); 
} 

Tất nhiên bạn có thể sử dụng bất kỳ loại nào mở rộng từ Backbone.Collection. Tôi chỉ muốn minh họa quan điểm của nó là một bộ sưu tập với ví dụ này.

+1

Hơi không liên quan nhưng ... nếu bạn đang sử dụng tuyến đường để vượt qua tiêu chí lọc, bộ sưu tập sẽ không nhất thiết phải sẵn sàng/tìm nạp để được lọc theo thời gian 'khởi tạo' được gọi? – backdesk

Các vấn đề liên quan