2012-09-27 11 views
5

Tengo un Marionette.CompositeView que debe representar una colección.
Me gustaría filtrar esta colección en fetch y add acción.
He intentado con el siguiente código (1) pero obtengo el siguiente error (2).La forma correcta de filtrar un backbone.collection utilizando Marionette.CompositeView

Cualquier idea, gracias.


(1)

var myCompositeView = Marionette.CompositeView.extend({ 

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

}); 

(2)

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

Respuesta

8

CompositeView y CollectionView de marionetas en tanto esperan que el ajuste collection a ser un Backbone.Collection válida. El método where en la colección de Backbone no devuelve un Backbone.Collection, devuelve una matriz. Así que hay que envolver una colección de alrededor de los resultados:


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

Por supuesto, se puede utilizar cualquier tipo que se extiende desde Backbone.Collection. Solo quería ilustrar el hecho de que es una colección con este ejemplo.

+1

Algo relacionado pero ... si usa rutas para pasar los criterios de filtro, la colección no estará necesariamente lista/recuperada para poder ser filtrada cuando se invoca 'inicializar'? – backdesk

Cuestiones relacionadas