2012-03-21 3 views
8

모음에는 '성', '성'속성이있는 모음의 사용자 목록 (정확히 6 개)이 있습니다. 가져 오기를 수행하면 아래의 비교기가 'firstname'으로 정렬하고 잘 작동합니다.백본/밑줄 sortBy가 모음을 정렬하지 않습니다.

comparator : function (user) { 
    return user.get("firstname").toLowerCase(); 
} 

하지만 나중에 '성'과 다른 값으로 컬렉션을 정렬하려고하면 작동하지 않습니다. 명령은 동일하게 유지됩니다.

this.collection.sortBy(function(user) { 
    return user.get("lastname").toLowerCase(); 
}); 

내가 뭘 잘못하고 있니?


업데이트


그래서 sortBy에서 반환 된 데이터를 정렬하지만 내보기가 컬렉션에 연결되어로 그 날 정말 도움이되지 않습니다. 만약 내가 컬렉션을 재설정하고 정렬 된 배열을 컬렉션에 다시 추가하면 비교자인 것이고 'firstname'순서로 다시 정렬됩니다.

var sorted = this.collection.sortBy(function(user) { 
    return user.get("lastname").toLowerCase(); 
}); 

답변

11

sortBy 함수는 현재 컬렉션의 개체를 정렬하지 않습니다. 그것은 정렬 된 컬렉션을 반환합니다


var sortedCollection = this.collection.sortBy(function(user){ 
    return user.get("lastname").toLowerCase(); 
}); 

지금 당신이 sortedCollection를 사용하고 올바르게 정렬됩니다. 백본 사용

+0

감사합니다. Derick. 그리고 귀하의 사이트에 감사드립니다. 훌륭한 개발자 리소스입니다. – screenm0nkey

+0

비교 함수가 정수를 반환해야합니까? –

+2

컬렉션이 아니라 목록을 반환합니다. 거대한 거래는 아니지만 언급할만한 가치가 있습니다. – Chris

3

밑줄의 sortBy, 반환 정렬 된 컬렉션 는 설명하기 위해 ... 장소에 정렬 할 : 당신이

을 원하는 경우 :

var flinstones = [{first: 'Baby', last: 'Puss'}, {first: 'Fred', last: 'Flinstone'}]; 
var sorted = _.sortBy(flinstones, function (character) { return character.last ; }); 
console.log(sorted); 
console.log(flinstones); 
+1

+1 답변 해 주셔서 감사합니다. – screenm0nkey

13

당신의 갱신에 대응하기 위해 콜렉션이 해당 뷰에서 사용하기 위해 정렬 된 순서를 변경하려면 comparator을 업데이트 한 다음 sort을 호출하여 모델을 다시 정렬하십시오. 이렇게하면 sort 이벤트가 발생하여보기가 수신 대기하고 그에 따라 업데이트 할 수 있습니다.

this.collection.comparator = function (user) { 
    return user.get("firstname").toLowerCase(); 
}; 

this.collection.sort(); 
+0

+1 답변 해 주셔서 감사합니다. 그때 내가 그럴거야. – screenm0nkey

+0

여기가 가장 좋은 대답입니다. – Chris

관련 문제