ski*_*joe 21 arrays sorting properties object ember.js
我在EmberJS网站上的Filtering中注意到了这一点:
在Enumerable上执行的另一个常见任务是将Enumerable作为输入,并在根据某些条件对其进行排序或过滤后返回一个Array .
想象一下,我有一个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})
]
})
Run Code Online (Sandbox Code Playgroud)
如果我想按年龄对上述内容进行排序怎么办?谢谢你的帮助!
编辑:我在sproutcore文档中找到了这个,但它似乎不适用于Ember:
您可以使用sortProperty根据某些属性或属性列表的值对Enumerable进行排序.如果传入多个属性,SproutCore将使用第二个参数的值对第一个属性的值进行排序,依此类推.
ski*_*joe 11
编辑:以下解决方案似乎只适用于数值.但是,此链接将提供有关如何处理字母数字,日期等的建议:http://www.javascriptkit.com/javatutors/arraysort2.shtml
没关系,我明白了.您可以使用以sort方法构建的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');
});
Run Code Online (Sandbox Code Playgroud)
Wil*_*Wit 11
如此处所述,您现在可以对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'}
Run Code Online (Sandbox Code Playgroud)