Подтвердить что ты не робот

Сортировка массива объектов EmberJS по свойству

Я заметил это на веб-сайте EmberJS в разделе "Фильтрация":

Еще одна общая задача, выполняемая в Enumerable, - принять Перечисляется как вход и возвращает массив после сортировки или его фильтрации основанный на некоторых критериях.

Представьте, что у меня есть массив объектов Ember, как мне его сортировать по свойству?

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

Что, если бы я хотел сортировать выше по возрасту? Спасибо за вашу помощь!

EDIT: Я нашел это в документации sproutcore, но, похоже, это не работает с Ember:

Вы можете сортировать Enumerable на основе значения некоторого свойства или списка свойств с помощью sortProperty. Если вы передадите несколько свойств, SproutCore будет сортировать элементы с тем же значением для первого свойства по значению второго параметра и т.д.

Раздел 3.8 на этой странице: http://guides.sproutcore20.com/enumerables.html

4b9b3361

Ответ 1

Как описано здесь, теперь вы можете отсортировать свой ArrayController.

То, как вы это делаете, предоставляет дополнительные свойства на вашем ArrayController (вставленном из ссылки выше):

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'}

Ответ 3

EDIT: нижеприведенное решение применяется только к числовым значениям. Однако эта ссылка даст советы о том, как обрабатывать буквенно-цифровые, даты и т.д.: http://www.javascriptkit.com/javatutors/arraysort2.shtml

Nevermind, я понял это. Вы можете сделать это с помощью Javascripts, встроенных в метод сортировки:

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

Ответ 4

В случае, если кто-нибудь столкнется с этим, обновленный способ сортировки в ember

 Ember.computed.sort('nameOfArrayToSort', sortDefinition)

sortDefinition может быть массивом строк

 ['mainSortProperty:asc', 'secondarySortProp:desc', ...]

или функция компаратора

docs здесь: http://emberjs.com/api/classes/Ember.computed.html#method_sort