Сортировать массив объектов EmberJS по свойству - PullRequest
21 голосов
/ 28 января 2012

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

Другая распространенная задача для Enumerable - это принять Enumerable в качестве входных данных и вернуть массив после sorting или фильтрация по некоторым критериям.

Представьте, что у меня есть массив объектов 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})
    ]
})
* 1013Что делать, если я хотел бы отсортировать выше по возрасту?Спасибо за вашу помощь!

РЕДАКТИРОВАТЬ: Я нашел это в документации sproutcore, но, похоже, он не работает с Ember:

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

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

Ответы [ 5 ]

16 голосов
/ 06 февраля 2014

Ember MutableArray имеет метод sortBy:

https://emberjs.com/api/ember/release/classes/MutableArray

11 голосов
/ 30 января 2012

РЕДАКТИРОВАТЬ: Представленное ниже решение, кажется, применяется только к числовым значениям. Однако по этой ссылке вы узнаете, как работать с алфавитно-цифровыми цифрами, датами и т. Д .:

Неважно, я понял это. Вы можете сделать это с помощью 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');
});
11 голосов
/ 08 апреля 2013

Как описано здесь , теперь вы можете отсортировать 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'}
4 голосов
/ 05 октября 2015

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

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

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

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

или функция сравнения

документы здесь: http://emberjs.com/api/classes/Ember.computed.html#method_sort

3 голосов
/ 28 января 2012

Как обсуждено в https://github.com/emberjs/ember.js/issues/335, сортировка больше не реализована в пакете ember.js core.

...