2011-12-08 2 views
2

먼저 컬렉션에서 내 모델을 required 플래그로 정렬하고 알파벳순으로 value으로 정렬 할 수 있기를 원합니다.비교기를 사용하여 여러 특성으로 정렬하려면 어떻게합니까?

현재 내 코드는 다음에 다음과 같습니다

var myModel = Backbone.Model.extend({ 
    defaults: { 
     required: true, 
     value: '', 
     ... 
    } 
}; 

var myCollection = Backbone.Collection.extend({ 
    model: myModel, 
    comparator: function (model) { 
     return -model.get('required'); 
    } 
}); 

myCollection.create([ 
    {value: 'A', required: false}, 
    {value: 'B', required: true}, 
    {value: 'C', required: false}, 
    {value: 'D', required: false}, 
    {value: 'E', required: true} 
]); 

비교기가 필요 첫째로 내 모델을 정렬하지만 나는 또한 그들을 알파벳 순으로 정렬하는 방법에 대한 손실에 있어요.

B, E, A, C, D

+0

가능한 복제본 [Javascript, 어떻게 여러 열로 배열을 정렬합니까?] (http://stackoverflow.com/questions/2784230/javascript-how-do-you-sort-an-array-on-multiple –

+1

백본에 대한 또 다른 질문에 답했습니다. "비교"아키텍처입니다. 비교가되지 않았기 때문에 분명히 잘못 명명 되었기 때문에 실제 디자인 결함이라고 생각합니다. – Pointy

+0

문제는 '비교 자'가 비교할 두 개의 객체를주는 것 같지 않은 두 항목을 비교하는 방법을 모르겠다는 것입니다. – JaredMcAteer

답변

4

귀하의 "비교"값으로 구성된 문자열과 캐릭터 라인 버전을 반환 할 수 있습니다 : 뷰를 렌더링 현재 때 그들은 내가 그들을 렌더링 할

E, B, D, C, A

나와 원하는 방식으로 물건을 주문할 부울 "필수"속성 중 하나를 선택할 수 있습니다.

comparator: function(model) { 
    return (model.required ? "0" : "1") + model.value; 
} 

그런 식으로, 값 "A"는 "required"플래그에 따라 "0A"또는 "1A"로 비교됩니다.

+0

수정 귀하의 답변을 수정하므로이 의견의 첫 부분을 삭제했습니다. 추신. 당신의 대답에 대한 링크가'comparator '아키텍처에 관해서 무엇인지, 나는 그것을 읽고 싶습니다. 편집 : – JaredMcAteer

+0

오 교황이나 아무것도; 나는 처음으로 내가 그것을 보았을 때 나는 이상하다고 생각했고, 이제 나는 상기시켰다. 예를 들어, 문자열을 역순으로 정렬하는 것을 고려하십시오. 문자열의 "음수"버전을 어떻게 구성하겠습니까? – Pointy

+0

[Here] (http://stackoverflow.com/questions/5013819/reverse-sort-order-with-backbone-js)는이 문제를 설명하는 Stackoverflow 질문입니다. – Pointy

관련 문제