2014-01-21 3 views
1

백본의 컬렉션 모델을 사용하여 백본보기에 정렬 된 문자열 목록을 표시하고 있습니다.비교기를 사용할 때 백본 컬렉션이 반 정렬되었습니다.

코드가 실행
var MenuItems = Backbone.Collection.extend({ 
    comparator: function (a, b) { 
    if (a.get('name') < b.get('name')) { 
     return 1; 
    } else if (b.get('name') > a.get('name')) { 
     return -1; 
    } 
    }, 

    model: MenuItem, 
    url: '/items' 
}); 

는 만 목록에 열두 항목의 처음 여섯이 분류되어, 나머지는 분류되지 않은 남아 다음은 모델과 비교입니다. comparator: 'name'을 사용하면 목록이 완전히 정렬되지만 함수를 사용하면이 문제가 발생합니다.

왜 이런 일이 벌어지고 있는지 알 수 있습니다. 이것이 백본 버그일까요? 백본 1.1.0을 사용 중입니다.

+0

소팅중인 이름 항목을 게시 할 수 있습니까? – Divey

+3

[ "sort"비교 함수는 두 개의 모델을 사용하고 첫 번째 모델이 두 번째 모델보다 먼저 나오면 -1을 반환하고 같은 순위의 모델이면 0을 반환하고 첫 번째 모델을 가져 오는 경우에는 1을 반환합니다. "] (http : /backbonejs.org/#Collection-comparator). 이 세 가지 경우 중 하나가 누락되어 모든 배팅이 해제됩니다. –

+0

@Divey @Divey : {칠리 콘 카네, 치즈 버거, 피자, 시저 샐러드, 가든 샐러드, 브라우니, 당근, 치즈 케이크, 녹색 콩, 으깬 감자, 스파게티와 미트볼, 토마토 샐러드}는 {당근, 토마토 샐러드, 스파게티 미트볼, 피자, 으깬 감자, 녹색 콩, 가든 샐러드, 칠리 콘 카네, 치즈 케이크, 치즈 버거, 시저 샐러드, 브라 우니) – Branka

답변

5

다음은 작동 코드입니다. 당신은 가장 큰 문제는 기능의 내용으로했다 http://jsfiddle.net/ek44Z/2/

을 비교할 수 있도록

var MenuItems = Backbone.Collection.extend({ 
    comparator: function (a, b) { 
     if (a.get('name') < b.get('name')) { 
      return -1; 
     } else if (a.get('name') > b.get('name')) { 
      return 1; 
     } 
    } 
}); 

여기에 출력 jsfiddle입니다. if 문에 -1을 반환하고 abelse if에 비교하고 1을 반환해야합니다. 기본적으로 귀하의 else if은 전화 한 적이 없습니다.

좋은 코딩.

+0

| 감사! – Branka