2012-09-27 7 views
5

Mam Marionette.CompositeView, który musi renderować kolekcję.
Chciałbym odfiltrować tę kolekcję pod działaniem fetch i add.
Próbowałem z następującego kodu (1), ale pojawia się następujący błąd (2).Właściwym sposobem filtrowania kręgosłupa.collection przy użyciu Marionette.CompositeView

Wszelkie pomysły, dzięki.


(1)

var myCompositeView = Marionette.CompositeView.extend({ 

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

}); 

(2)

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

Odpowiedz

8

marionetek w CompositeView i CollectionView zarówno oczekiwać ustawienie collection być ważne Backbone.Collection. Metoda where w kolekcji Backbone nie zwraca wartości Backbone.Collection, zwraca tablicę. Więc trzeba owinąć wokół zbiór wyników:


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

oczywiście można użyć dowolnego typu, który rozciąga się od Backbone.Collection. Chciałem tylko zilustrować, dlaczego chodzi o kolekcję z tym przykładem.

+1

Trochę niepowiązane, ale ... jeśli używasz tras do przekazania kryteriów filtrowania, kolekcja niekoniecznie będzie gotowa/pobrana, aby zostać przefiltrowana przez czas wywołania "initialize"? – backdesk