如何在Ember中对嵌套数组进行排序?

4

我在Ember中有一个模型,它生成了一个包含三个对象的哈希表。其中一个对象是一个包含另一个数组的对象数组。我需要对这个最内层的数组进行排序,但我做不好。

以下是我的模型。

App.Person = DS.Model.extend ({
    first_name: DS.attr('string'),
    last_name: DS.attr('string'),
    age: DS.attr('string'),
    gender: DS.attr('string'),
    innerMostArray: DS.hasMany('innerMostObject')
});

App.innerMostObject = DS.Model.extend ({
    person_id: DS.belongsTo('person'),
    attr1: DS.attr('string'),
    attr2: DS.attr('string')
});

这是我的路径

App.NestedArrayRoute = Ember.Route.extend({
    model: function(params) {
        return Ember.RSVP.hash({
            object1: this.store.find('object1', params.object1_id),
            people: this.store.all('person'),
            object3: this.store.all('object3')
        });
    },
    afterModel: function(model, transition) {
        model.people.forEach(function(item, index, enumerable){
            var innerMostArray = item.get('innerMostArray');
            var sortedArray = innerMostArray.sortBy('attr1', 'attr2');
        });
        model.people.update();
    } 
});

我知道我还远没有做对这个问题,但我不知道如何对这个嵌套数组进行排序。我看过数组控制器的例子,但我不知道如何使用它来对这个嵌套数组进行排序。如果有人能给出一个示例,那将非常有帮助。谢谢。

2个回答

5

我同意Kalmans的回答,但建议您使用内置方法进行排序,以避免麻烦:

App.Person = DS.Model.extend({
   name: DS.attr('string'),
   fruits: DS.hasMany('fruit', {async: true}),
   fruitSorting: ['title', 'color'],
   sortedFruits: Ember.computed.sort('fruits', 'fruitSorting')
});

我在这里fork了他的示例:http://emberjs.jsbin.com/manutu/1/edit?html,js,output

看起来很棒!我喜欢它 :) - Kalman
排序不是唯一的内置功能,请查看以下以 Ember.computed. 开头的函数:http://emberjs.com/api/classes/Ember.html - thriqon
哦,我更喜欢这种方法。我认为这个更容易理解。 - lfitzgibbons

3

一种实现这一点的方法是在模型上创建计算属性,如下所示:

App.Person = DS.Model.extend({
  name: DS.attr('string'),
  fruits: DS.hasMany('fruit', { async: true }),
  sortedFruits: function(){
    var fruits = this.get('fruits');
    return fruits.sortBy('title', 'color');
  }.property('fruits.@each.title', 'fruits.@each.color')
});

这里有一个关于 IT 技术的实例,点击链接可查看。


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