按照属性排序EmberJS对象数组

21

我在EmberJS网站的“过滤”页面中注意到了这一点:

对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})
    ]
})
如果我想按照年龄对上面的内容进行排序怎么办?感谢您的帮助!编辑: 我在SproutCore文档中找到了这个方法,但在Ember中似乎不起作用: “您可以使用sortProperty根据某些属性或属性列表的值对Enumerable进行排序。如果传入多个属性,则SproutCore将使用第二个参数的值按第一个属性对项目进行排序,依此类推。” 请见此页面的第3.8节:http://guides.sproutcore20.com/enumerables.html
5个回答

16

11

编辑:下面的解决方案似乎只适用于数字值。但是这个链接将给出如何处理字母数字、日期等的建议:http://www.javascriptkit.com/javatutors/arraysort2.shtml

不用管了,我自己想通了。你可以使用JavaScript内置的排序方法实现:

//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

如此描述,您现在可以对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

如果有人遇到这个问题,Ember 中排序的最新方法是:

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

sortDefinition可以是一个字符串数组

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

或比较函数

文档在这里:http://emberjs.com/api/classes/Ember.computed.html#method_sort


3

6
看起来它已经重命名为SortableMixin了。http://docs.edge.emberjs.com/symbols/Ember.SortableMixin.html - Jo Liss

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接