2012-09-27 11 views
5

コレクションをレンダリングする必要があるMarionette.CompositeViewがあります。
このコレクションをfetchaddというアクションでフィルタリングします。
次のコード(1)を試しましたが、次のエラー(2)が表示されます。Marionette.CompositeViewを使用してbackbone.collectionをフィルタリングする適切な方法

アイデア、ありがとう。


(1)

var myCompositeView = Marionette.CompositeView.extend({ 

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

}); 

(2)

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

答えて

8

マリオネットのCompositeViewのとCollectionView両方collectionが有効Backbone.Collectionことが設定期待。 Backboneのコレクションのwhereメソッドは、Backbone.Collectionを返しません。配列を返します。したがって、結果の周りにコレクションをラップする必要があります。


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

もちろん、Backbone.Collectionから拡張する任意のタイプを使用できます。私は、この例のコレクションであることを説明したかっただけです。

+1

フィルタ基準でパスを渡すためにルートを使用している場合、 'initialize'が呼び出されるまでにフィルタリングされるためにコレクションが必ず準備/フェッチされるとは限りません。 – backdesk

関連する問題