이름과 날짜가있는 할 일 목록이 있습니다. 제목이나 날짜를 사용하여 목록을 정렬 할 수 있기를 원합니다. 어떻게하면 좋을까요? Comparator는 한 가지 유형의 정렬 만 허용합니다.여러 정렬을 사용하는 Backbone.js 컬렉션
감사합니다.
이름과 날짜가있는 할 일 목록이 있습니다. 제목이나 날짜를 사용하여 목록을 정렬 할 수 있기를 원합니다. 어떻게하면 좋을까요? Comparator는 한 가지 유형의 정렬 만 허용합니다.여러 정렬을 사용하는 Backbone.js 컬렉션
감사합니다.
는 내가하는 방법을 찾은 것 같아 : sortBy 재설정하는 인자로 전달되는 새로운 정렬 된 배열을 반환
collection.reset(collection.sortBy(function(item){
return item.get(sortingFIeld);
}))
. SortingField는 모델의 문자열 속성입니다.
comparator: function(item) {
return [item.get("level"), item.get("title")]
}
그는 재설정을 사용하지 않으려한다고 구체적으로 말했습니다. 그리고 이제 그는 그것을 편집했습니다 : P 당신 잘못이 아닙니다. –
나는 나이지만 롤. 내가 생각할 수있는 해결책이기 때문에 나는 그것을 편집했다. – chenglou
답변을 확대 할 수 있습니까? 나는 동일한 것을 다루고 있으며 정렬 할 속성 (제목 또는 날짜)을 지정하는 곳이 궁금합니다. – CamelBlues
, 여기에 해당 게시물에서 제공하는 솔루션입니다 :
다음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);
이 모델이 추가 될 때마다, 그것은 비교기를 호출하고 현재 설정이 무엇이든 사용하여 정렬 추가 된 장점을 가지고는 때문에 정렬 방법은 컬렉션에 저장됩니다.
비교기에 더 많은 로직을 구현 할 수 있습니다 당신이 떨어져 추상적 할 수 있도록 정렬 로직의 일부 :
는+1입니다. 옵션은 함수가 필요로하는 응용 프로그램간에 정보를 전달하는 방법입니다. – Throttlehead
왜 컬렉션을 재설정하지 않겠습니까? 이 정확한 이유에 대한 재설정 트리거 (보기 용)가 있습니다. 즉 정렬을 통해 정렬이 변경되면보기가 다시 렌더링됩니다. –
네가 맞아, 나는 전체 컬렉션을 재설정하는 데 불리한 점이 없다. 감사. – chenglou
데이터가 변경되면 컬렉션을 '다시 설정'하는 것이 일반적입니다. 데이터가 동일하지만 순서가 다른 경우에도 컬렉션 전체를 다시 설정하십시오. –