Сортировка массива объектов 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
Ответы
Ответ 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'}
Ответ 2
Ember Array имеет метод sortBy
http://emberjs.com/api/classes/Ember.Enumerable.html#method_sortBy
Ответ 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
Ответ 5
Как обсуждалось в https://github.com/emberjs/ember.js/issues/335 сортировка больше не реализуется в ядре ember.js
.