Backbone.js: обновить коллекцию другими данными
У меня есть Backbone Collection моделей, в которых при загрузке страницы поступают разные данные, чем при получении.
Например, атрибуты, поступающие при загрузке страницы:
[{ name: 'cat', color: 'yellow' },
{ name: 'dog', color: 'brown' },
{ name: 'fish', color: 'orange' }]
Затем в fetch() (или иным образом обновляется с сервера во время жизни страницы) данные выглядят следующим образом:
[{ name: 'cat', current: 5, total: 100 },
{ name: 'dog', current: 6, total: 50 },
{ name: 'fish', current:7, total: 25 }]
Как я могу обновить Backbone Collection новыми данными, сохранив старые данные? Идентификаторы не назначаются с сервера (имя гарантировано уникальное).
1 ответ
Решение
Я закончил тем, что пошел с этим. Это обновит свойства существующих моделей, а также удалит модели, которые не вошли, и добавит новые.
Backbone.Collection.prototype.update = function(col_in){
var self = this,
new_models = [];
_(col_in).each(function(mod_in) {
var new_model = self._prepareModel(mod_in),
mod = self.get(new_model.id);
if (mod) {
new_models.push(mod.set(mod_in, {silent:true}));
} else {
new_models.push(mod_in);
}
});
this.reset(new_models);
};
Обратите внимание на использование _prepareModel
это важно, чтобы модели можно было идентифицировать с помощью любого свойства "id", используемого в объекте Backbone Model.