2012-06-22 12 views
6

Czy istnieje sposób, aby automatycznie posortować zauważalnego tablicę, gdy nieruchomość jest związana zmieniło? Uważam, że w poniższym przykładzie mój widok jest aktualizowany po dodaniu nowej osoby, ale czy mogę uzyskać odświeżenie i zastosować funkcję sortowania, jeśli zmieni się wiek danej osoby?Automatyczne sortowanie ko.observableArray właściwości jak bound zmienić

person = { 
    age: ko.observable(); 
} 

viewModel = { 

    people: ko.observableArray([]), 

    someSortFunction: function() { 
     this.people.sort(function(person1, person2) { 
      return person2.age() - person1.age(); 
     }); 
    } 
} 

<div data-bind="foreach: people"> 
    <span data-bind="text: age"/> 
</div> 

Odpowiedz

4

Możesz zapisać zauważalny i działać ilekroć że obserwowalne zmiany:

person.age.subscribe(function (newValue) { 
    viewModel.someSortFunction(); 
}); 
+1

Uwaga: istnieją problemy z tym podejściem, że ci, uznając ją będzie chciał być świadomi. Po pierwsze: aby zapewnić ciągłość sortowania obserwowalnej macierzy, trzeba ręcznie subskrybować tę samą właściwość na każdym elemencie tablicy. Po drugie: subskrypcje pozostają, chyba że ręcznie usuniesz je z każdego elementu, gdy usuniesz go z tablicy obserwowalnej. To stwarza potencjalne ryzyko wycieku pamięci. Używaj tej techniki z wielką ostrożnością. – Randolpho

+1

@Randolpho :: całkiem prawdziwe ... co może wydawać się oczywiste, może prowadzić do błędu podobnego do "Uncaught RangeError: Przekroczono maksymalny rozmiar stosu połączeń", w którym "subskrybuj" jest nadal uruchamiany według sortowania ... i nigdy się nie zatrzymuje – beauXjames

Powiązane problemy