2013-05-24 6 views
5

Miałem posortowaną listę przy użyciu pliku knockout.js dla wybranej listy. Chcę przekonwertować go na listę nieuporządkowaną. Jaka jest metoda sortowania listy przy użyciu pliku knockout.js? Mam na myśli ten błąd jest z:. AllItems() długość> 1Lista sortowania Knockout.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> 

Odpowiedz

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

Czy możesz edytować odpowiedź na rosnące i malejące sortowanie? Jestem zdezorientowany, co to jest aib? – Ahmed

+0

"a" i "b" nie są zmiennymi, których używasz w swojej aplikacji, są to w rzeczywistości niektóre zmienne losowe z funkcji sortowania, ponieważ funkcje sortowania muszą otrzymać 2 parametry do sortowania 2 elementów, prawda? :) – dpaul1994

+1

Ogólnie przyjmuje się, że wyjaśniasz próbkę kodu, a nie tylko podajesz kopię i wklejasz odpowiedź. Pomoże to przyszłym użytkownikom, którzy tu przybyli, w poszukiwaniu większej ilości informacji na ten temat. –

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;})); 
    }; 
}; 

linie wyjaśnił: weWiliChangeTheArrayToValue (weWilSortTheArrayWithASpecialFunction (ComparatorFunction))

ComparatorFunction tj .

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

to specjalna funkcja, która ułatwia sortowanie funkcji sortowania.
Wymaga 2 argumentów i porównuje je zwracając true, jeśli pierwszy argument jest "większy" (powinien być dalej na liście) i false, jeśli pierwszy argument jest "mniejszy"
Każdy (prawie) algorytm sortowania działa poprzez porównanie 2 elementów sortowanej kolekcji, aż wszystko będzie w porządku.
Zmiana kolejności odbywa się poprzez upewnienie się, że funkcja zwraca false kiedy to return true normalnie - Najprostszym sposobem na to jest poprzez zmianę pracy>, aby <

EDIT jeszcze jedno: jeśli porównać nie- Znaki ASCII używają powrotu a.localCompare (b); (I powrót b.localCompare (a)), a gdy chodzi o numery stosowania „-” sing więc jest to operacja arytmetyczna

EDIT2
ostrzegawcze powyższej metody „>” może zerwać z duplikatów w tablicy użyciu

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

zamiast (lub tylko localCompare)

+0

To powinno być oznaczone poprawną odpowiedzią. Odpowiada na pytanie i wyjaśnia, co dzieje się w próbce kodu. +1 –