2012-01-27 27 views
21

zauważyłem tego na stronie EmberJS pod zaawansowane:Sortowanie tablicy obiektów EmberJS posesją

Innym częstym zadanie do wykonania na przeliczalny jest podjęcie Enumerable jako wejście i zwraca tablicę po sortowanie lub filtrowanie go na podstawie pewnych kryteriów.

Wyobraź sobie, że mam szereg obiektów Ember, jak mam je sortować według właściwości?

App.DemoArray = Ember.ArrayController.create({ 
    content:[ 
     Ember.Object.create({name:'Joe', Age:29}), 
     Ember.Object.create({name:'Jim', Age:53}), 
     Ember.Object.create({name:'Jack', Age:12}) 
    ] 
}) 

Co zrobić, jeśli chcę sortować powyższe według wieku? Dzięki za pomoc!

EDIT: Znalazłem to w dokumentacji sproutcore ale nie wydaje się, aby pracować z Ember:

Można posortować przeliczalny na podstawie wartości niektórych nieruchomości lub listy właściwości korzystających SortProperty . Jeśli przełączysz wiele właściwości, SproutCore będzie sortować elementy o tej samej wartości dla pierwszej właściwości przez wartość drugiego parametru i tak dalej.

sekcja 3.8 na tej stronie: http://guides.sproutcore20.com/enumerables.html

Odpowiedz

11

As described here można teraz sortować ArrayController.

Sposób, w jaki to zrobić jest zapewnienie dodatkowych właściwości na ArrayController (wklejony z linku powyżej):

songs = [ 
    {trackNumber: 4, title: 'Ob-La-Di, Ob-La-Da'}, 
    {trackNumber: 2, title: 'Back in the U.S.S.R.'}, 
    {trackNumber: 3, title: 'Glass Onion'}, 
]; 

songsController = Ember.ArrayController.create({ 
    content: songs, 
    sortProperties: ['trackNumber'], 
    sortAscending: true 
}); 

songsController.get('firstObject'); // {trackNumber: 2, title: 'Back in the U.S.S.R.'} 
songsController.addObject({trackNumber: 1, title: 'Dear Prudence'}); 
songsController.get('firstObject'); // {trackNumber: 1, title: 'Dear Prudence'} 
11

EDYCJA: Poniższe rozwiązanie wydaje się mieć zastosowanie tylko do wartości numerycznych. Jednak ten link zawiera porady dotyczące obsługi alfanumerycznych, dat itd.: http://www.javascriptkit.com/javatutors/arraysort2.shtml

Nieważne, udało mi się to ustalić. Można to zrobić z JavaScripts zbudowanych w sposób sortowania:

//To sort ASC 
var sorted = content.sort(function(a,b) { 
    return a.get('propertyYouWantToSortBy') - b.get('propertyYouWantToSortBy'); 
}); 

//To sort DESC 
var sorted = content.sort(function(a,b) { 
    return b.get('propertyYouWantToSortBy') - a.get('propertyYouWantToSortBy'); 
}); 
Powiązane problemy