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.

Другие вопросы по тегам