2013-03-11 2 views
1

N 사진을 나타내는 백본 컬렉션이 있습니다. 처음에는 컬렉션에있는 N 개의 사진을 몇 장 가지고 있습니다 (X라고 말하면됩니다).순서 변경없이 백본 컬렉션을 병합합니다.

내 컬렉션은 서비스에서 N 개의 모든 사진을 가져옵니다. 이 N으로 내 컬렉션을 재설정 할 수는 있지만 문제는 기존 X에 몇 가지 추가 메타 데이터가 있으며이를 잃고 싶지 않다는 것입니다. 따라서 기존 컬렉션에있는 N 개의 사진을 병합하고 싶습니다. 어떻게해야합니까?

collection.add (N 사진)를 사용했지만 그게 그대로 X 사진을 그대로 유지 한 다음 나머지 (N-X)를 끝에 추가합니다. 서비스에서 반환 한 N 개의 사진 순서를 유지하고 기존 사진을 N 개의 사진과 병합합니다.

+0

그래서 당신이 X'가, 서버,'N'은 X''이미 일을 가지고 (또는있을 수 있습니다)에서'N'을 얻을'이, 당신은 여분을 병합 할 'X'의 속성을 'N'의 해당 모델로 변환합니다. 'N'의 사물을 방해하지 않습니다. 권리? –

+0

예, 당신이 그것을 못 박았습니다. – sublime

답변

0

이에 대한 컬렉션의 comparator을 사용할 수 있어야합니다 :

비교 기본적으로collection.comparator

콜렉션에 대한 비교 없다. 비교자를 정의하면 콜렉션을 정렬 된 순서로 유지하는 데 사용됩니다. 즉, 모델이 추가되면 올바른 인덱스 인 collection.models에 삽입됩니다.

그래서 당신이해야 할 모든 컬렉션은 당신이 add를 호출하기 전에 N 사물의 순서를 알고있는 comparator이 있는지 확인합니다. 개념의 거칠고 추한 증거는 다음과 같이 보일 것이다 :

// `incoming` is the new data, `c` is the collection. 
for(var i = 0, rev = { }; i < incoming.length; ++i) 
    rev[incoming[i].id] = i; 
c.comparator = function(m) { 
    return rev[m.id]; 
}; 
c.add(incoming); 

실제 버전은, 아마도, 컬렉션 내부에 포장 될 것이다.

데모 : http://jsfiddle.net/ambiguous/dCZbv/

관련 문제