2012-05-25 2 views
1

У меня есть модель моделей с маками, которые имеют разные данные, поступающие на загрузку страницы, чем когда они извлекаются.Backbone.js: коллекция обновлений с различными данными

Например, атрибуты, поступающие на странице загрузки являются:

[{ name: 'cat', color: 'yellow' }, 
{ name: 'dog', color: 'brown' }, 
{ name: 'fish', color: 'orange' }] 

Затем на выборку() (или в противном случае обновляются с сервера, а жизнь страниц, данные выглядит следующим образом:

[{ name: 'cat', current: 5, total: 100 }, 
{ name: 'dog', current: 6, total: 50 }, 
{ name: 'fish', current:7, total: 25 }] 

Как я могу обновить Backbone Collection с новыми данными, сохраняя при этом старые данные? идентификаторы не назначается с сервера (имя гарантировано уникальным).

+0

Определить «сохранить». Вы хотите сохранить старые данные в какую-то переменную? Или больше сохранить как старые, так и новые данные в одном экземпляре коллекции? –

+0

Последнее (сохранить как старые, так и новые данные в одном экземпляре коллекции) – Muers

+1

, тогда не встроенный 'fetch()' делает то, что вы хотите? [Из документов] (http://documentcloud.github.com/backbone/#Collection-fetch): * Если вы хотите добавить входящие модели в текущую коллекцию, вместо замены содержимого коллекции, передайте '{ add: true} 'в качестве опции для извлечения. * –

ответ

0

Я в конечном итоге иду g с этим. Это позволит обновить свойства для существующих моделей, а также удалить модели, которые не вошли и добавить новые.

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 этом очень важно, чтобы эти модели могут быть идентифицированы с помощью любой собственности «идентификатор» используется в объекте Backbone модели.

Смежные вопросы