Решил, что пора взрослеть и переучиваться лапшекодить на jquery - выбрал для начала backbone, чтобы более-менее разобраться с клиентским MVC.
Вьюшка перерисовывается, модельки сохраняются, да коллекции не фильтруются:
имеется коллекция с фильтром (все просто):
var AdList = Backbone.Collection.extend({
url: "/ads",
model: app.Ad,
byParam: function (param) {
param = param || {};
var filtered = this.filter(function (ad) {
var byDevice = param.device ? _.contains(_.pluck(ad.get('devices'), 'title'), param.device) : 1,
byPlatform = param.platform ? _.contains(_.pluck(ad.get('platforms'), 'title'), param.platform) : 1;
var byOldVersions = 1, byLastVersion = 1;
if(param.for_old_versions){
byOldVersions = ad.get('for_old_versions');
}
if(param.for_last_version){
byLastVersion = ad.get('for_last_version');
}
return byDevice && byPlatform && byOldVersions && byLastVersion;
});
// console.log('filtered', new AdList(filtered));
return (filtered);
},
});
app.Ads = new AdList([{"id":91,"title":"asldknnsadl"}, ....]); // тут json с сервера
Далее в вью мы меняем всякие значения инпутов и у нас срабатывает событие filter, которое обрабатывается вот таким способом:
this.on('filter', function(param){
this.collection.reset(this.collection.filtering(param));
}, this);
Заменяю коллекцию новыми значениями - все ок.
На render установлен обработчик, перерисовывающий список.
Суть проблемы вот в чем:
заменяя коллекцию через reset, почему-то дропается app.Ads -- это нормальное поведение?
Если "да", то как правильно фильтровать коллекции?
Есть мысль дублировать коллекцию внутри и рендерить новую фильтрованную, но мне кажется, что это костыль какой-то.
Спасибо!