2012-08-08 4 views
5

이름과 날짜가있는 할 일 목록이 있습니다. 제목이나 날짜를 사용하여 목록을 정렬 할 수 있기를 원합니다. 어떻게하면 좋을까요? Comparator는 한 가지 유형의 정렬 만 허용합니다.여러 정렬을 사용하는 Backbone.js 컬렉션

감사합니다.

+1

왜 컬렉션을 재설정하지 않겠습니까? 이 정확한 이유에 대한 재설정 트리거 (보기 용)가 있습니다. 즉 정렬을 통해 정렬이 변경되면보기가 다시 렌더링됩니다. –

+0

네가 맞아, 나는 전체 컬렉션을 재설정하는 데 불리한 점이 없다. 감사. – chenglou

+0

데이터가 변경되면 컬렉션을 '다시 설정'하는 것이 일반적입니다. 데이터가 동일하지만 순서가 다른 경우에도 컬렉션 전체를 다시 설정하십시오. –

답변

1

는 내가하는 방법을 찾은 것 같아 : sortBy 재설정하는 인자로 전달되는 새로운 정렬 된 배열을 반환

collection.reset(collection.sortBy(function(item){ 
    return item.get(sortingFIeld); 
})) 

. SortingField는 모델의 문자열 속성입니다.

comparator: function(item) { 
    return [item.get("level"), item.get("title")] 
} 
+0

그는 재설정을 사용하지 않으려한다고 구체적으로 말했습니다. 그리고 이제 그는 그것을 편집했습니다 : P 당신 잘못이 아닙니다. –

+1

나는 나이지만 롤. 내가 생각할 수있는 해결책이기 때문에 나는 그것을 편집했다. – chenglou

+0

답변을 확대 할 수 있습니까? 나는 동일한 것을 다루고 있으며 정렬 할 속성 (제목 또는 날짜)을 지정하는 곳이 궁금합니다. – CamelBlues

3
당신은 the answer here 볼 필요가 있습니다

, 여기에 해당 게시물에서 제공하는 솔루션입니다 :

다음
var Collection = Backbone.Collection.extend({ 

    model: myModel, 
    order: 'name' 

    comparator: function(model) { 
     if (this.order === 'name') { 
      return model.get('name'); 
     } else { 
      return model.get('date'); //or modify date into a numeric value 
     } 
    } 
}); 

당신이 그것을 정렬 방법을 변경하려면 다음

myCollection.order = 'date'; 
myCollection.sort(); 

이것은 비교 함수를 호출하고 이런 식으로 정렬합니다.

당신은보기의 의지를 수신 할 수 있습니다 :

this.listenTo(myCollection,'sort',this.render); 

이 모델이 추가 될 때마다, 그것은 비교기를 호출하고 현재 설정이 무엇이든 사용하여 정렬 추가 된 장점을 가지고는 때문에 정렬 방법은 컬렉션에 저장됩니다.

4

비교기에 더 많은 로직을 구현 할 수 있습니다 당신이 떨어져 추상적 할 수 있도록 정렬 로직의 일부 :

+0

+1입니다. 옵션은 함수가 필요로하는 응용 프로그램간에 정보를 전달하는 방법입니다. – Throttlehead

관련 문제