2013-05-24 3 views
5

나는 선택 목록에 knockout.js를 사용하여 정렬 된 목록을 가졌습니다. 정렬되지 않은 목록으로 변환하고 싶습니다. knockout.js를 사용하여 목록을 정렬하는 방법은 무엇입니까? 내가 오류를 생각하고하는 것은 함께 :. allItems() 길이> 1Knockout.js 정렬 목록

http://jsfiddle.net/infatti/Ky5DK/

var BetterListModel = function() { 
    this.allItems = ko.observableArray([ 
     { name: 'Denise' }, 
     { name: 'Charles' }, 
     { name: 'Bert' } 
    ]); // Initial items 

    this.sortItems = function() { 
     this.allItems.sort(); 
    }; 
}; 

ko.applyBindings(new BetterListModel()); 


<button data-bind="click: sortItems, enable: allItems().length > 1">Sort</button> 

답변

7
this.allItems(this.allItems().sort(function(a, b) { return a.name > b.name;})); 
+0

오름차순 및 내림차순 정렬에 대한 답변을 편집 해 주실 수 있습니까? 나는 a와 b가 무엇인지 혼란 스럽습니까? – Ahmed

+0

'a'와 'b'는 응용 프로그램에서 사용하는 변수가 아니며, 정렬 함수는 2 개의 항목을 정렬하기 위해 2 개의 매개 변수를 받아야하기 때문에 실제로 sort 함수의 임의의 변수입니다. 맞습니까? :) – dpaul1994

+1

일반적으로 코드 샘플을 설명하고 복사 및 붙여 넣기 응답 만 제공하는 것이 아니라 일반적으로 인정됩니다. 이것은 여기에 도착한 미래의 사용자가이 주제에 대한 더 많은 정보를 찾는데 도움이됩니다. –

4
var BetterListModel = function() { 
    this.allItems = ko.observableArray([ 
    { name: 'Denise' }, 
    { name: 'Charles' }, 
    { name: 'Bert' } 
    ]); // Initial items 

    this.sortItemsAscending = function() { 
     this.allItems(this.allItems().sort(function(a, b) { return a.name > b.name;})); 
    }; 

    this.sortItemsDescending = function() { 
     this.allItems(this.allItems().sort(function(a, b) { return a.name < b.name;})); 
    }; 
}; 

라인 설명 : weWiliChangeTheArrayToValue (weWilSortTheArrayWithASpecialFunction (ComparatorFunction))

ComparatorFunction 즉, .

function(a, b) { return a.name < b.name;} 

은 정렬 기능을 도움이되는 특별한 기능입니다.
첫 번째 인수가 '더 커야'(목록에서 멀리 떨어져 있어야 함)이면 첫 번째 인수가 '작음'이면 false를 반환하고 두 번째 인수는 비교하여 비교합니다.
거의 모든 정렬 알고리즘은 두 요소 모든 컬렉션이 정렬 될 때까지 정렬 된 콜렉션의 당신이 비 비교한다면 이렇게하는 가장 쉬운 방법은 <

편집에 한 가지 더를> 작업을 변경하는 것입니다 - 순서 변경
은 일반적으로 true를 반환 할 때 함수가 false를 반환하는 것을 확인하면됩니다 ASCII 문자는 return a.localCompare (b)를 사용합니다. (그리고 b.localCompare (a)가 반환;) "-"번호 사용을 처리 할 때 노래하는 것은 그래서 사용하는 배열의 중복과 휴식 수도 ">"위의 방법을 경고 연산

EDIT2

return a.name < b.name ? -1 : a.name > b.name ? 1 : 0; 

대신

+0

정답으로 표시해야합니다. 질문에 답하고 코드 샘플에서 진행되는 작업을 설명합니다. +1 –