2012-06-28 4 views
1

컬렉션은 모델을 알고 있지만 모델이 컬렉션에 도달 할 수있는 방법이 있습니까?모델이 컬렉션을 알고 있어야합니까?

컬렉션의 "인접한"모델을 얻는 방법이 필요합니다. 다음은 문제에 대해 더 잘 이해할 수 있습니다.

모델의 "우선 순위"속성을 기준으로 항목의 순위를 지정하고 그 목록을 유지 관리하는 간단한 앱을 구현하려고합니다. 각 모델 뷰에는 우선 순위를 높이거나 낮추기위한 버튼이있어 그에 따라 목록의 순서가 변경됩니다. 간단하게 추가 또는 예를 들어, 한 우선 순위-속성이 연속으로 작동 현재 값에서 하나를 뺀 :

1,2,3,4,5,6 

을하지만, 목록에서 어떤 모델을 삭제 허용하는 삭제 버튼도있다. 이 같은 우선 순위 속성으로 이어질 수 있습니다 :

1,2,5,6 

지금 그것이 문서화되지 않은 것보다 2

+0

우선 순위에 따라 컬렉션의 순서가 바뀌 었습니까? – reach4thelasers

답변

4

여전히 같은 습관 목록의 순서를 변경 5 4의 우선 순위를 변경하지만 모델은 자동 것이다 컬렉션을 가리키는 collection 속성이 있어야합니다. 모델이 여러 컬렉션에있는 경우 어떻게 작동하는지에 대한 세부적인 내용을 알지 못합니다 (아마도 collection 속성은 일단 설정되면 변경되지 않습니다).

언급 한 특정 문제를 해결하려면 컬렉션에서 remove 이벤트를 수신하고 적절하게 조정할 수 있습니다. 이 경우 collection 속성이 필요하지 않습니다. 모델 및 컬렉션 모두가 remove 수신기로 전달되기 때문입니다.

var handler = function (model, collection, options) { 

    // ... 

}; 

collection.on('remove', handler); 

Backbone.Collection docs이 말 :

remove 청취자에 options 인수가 문서화되어 있지 않습니다 options.index

로 모델 컬렉션에서 제거되고있는 인덱스를 사용할 수 있습니다 remove 리스너의 서명은 documented이지만 전달됩니다 (어쨌든 0.9.2에서).

+0

이것에 대해 잘 알고 있으면서, 단순히 이벤트를 변경하기 만하면 전체 문제가 해결된다는 것을 깨달았습니다. 그 다음 청취자에서 인접한 모델을 찾을 수 있습니다. – wannabeartist

+1

그래, 원래 그 말을하려고했는데, 제거 부분에 문제가있는 것 같았습니다. 콜렉션에서'change : priority'를 리스닝하면, 첫 번째 인자로 모델을 얻고'model.collection'을 통해 콜렉션에 접근 할 수 있습니다. 그렇지 않다면 의존 할 수 있습니다. listener를'collection.on ('change : priority', handler, collection)'으로 설정 한 다음 리스너에서 컬렉션을'this'로 액세스합니다. – JMM

관련 문제