2012-05-25 4 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 }] 
이전 데이터를 유지하면서

어떻게 새로운 데이터로 백본 컬렉션을 업데이트 할 수 있습니다? ID가 (이름이 고유의 보장) 서버에서 할당되지 않습니다.

+0

"보유"를 정의하십시오. 이전 데이터를 일부 변수에 저장한다는 의미입니까? 또는 동일한 컬렉션 인스턴스에서 이전 데이터와 새 데이터를 모두 유지해야합니까? –

+0

후자 (동일한 컬렉션 인스턴스에서 이전 데이터와 새 데이터를 모두 유지) – Muers

+1

그러면 내장 된'fetch()'가 원하는 것을 수행하지 않습니까? [docs에서] (http://documentcloud.github.com/backbone/#Collection-fetch) : * 들어오는 모델을 현재 컬렉션에 추가하려면 컬렉션의 내용을 바꾸는 대신에 {{ add : true}'를 가져 오는 옵션 * –

답변

0

내가가는 결국 g와 함께. 이렇게하면 존재하지 않는 모델을 제거하고 새로운 모델을 추가하면서 존재하는 모델의 특성이 업데이트됩니다. 어떤 "ID"속성은 백본 모델 객체에 사용을 통해 모델 식별 할 수 있도록

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이의 사용이 중요하다.

관련 문제