Backbone.js :правильный способ фильтрации коллекции?

Текущий метод, который я использую, заключается в фильтрации коллекции, которая возвращает массив, и использовании

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);
}

Это быстро становится громоздким, поскольку я пытаюсь реализовать другие приемы, связанные с манипулированием коллекцией, такие как сортировка. И, честно говоря, мой код выглядит немного хакерским. Есть ли элегантный способ сделать это?

Спасибо

8
задан chenglou 9 August 2012 в 15:28
поделиться