私が使用している現在の方法は、配列を返すコレクションをフィルタリングし、使用することです
collection.reset(array)
再入力します。ただし、これは元のコレクションを変更するため、コレクションの初期配列状態を追跡する「originalCollectionArray」という配列を追加しました。フィルタリングがアクティブでない場合は、単に使用します
collection.reset(originalCollectionArray)
しかし、実際のコレクションからのモデルの追加と削除を追跡する必要があるため、次のようにしました。
// inside collection
initialize: function(params){
this.originalCollectionArray = params;
this.on('add', this.addInOriginal, this);
this.on('remove', this.removeInOriginal, this);
},
addInOriginal: function(model){
this.originalCollectionArray.push(model.attributes);
},
removeInOriginal: function(model){
this.originalTasks = _(this.originalTasks).reject(function(val){
return val.id == model.get('id');
});
},
filterBy: function(params){
this.reset(this.originalCollectionArray, {silent: true});
var filteredColl = this.filter(function(item){
// filter code...
});
this.reset(filteredColl);
}
並べ替えなど、コレクションの操作に関連する他のトリックを実装しようとすると、これはすぐに面倒になります。率直に言って、私のコードは少しハックに見えます。これを行うエレガントな方法はありますか?
ありがとう