2015-03-06 2 views
4

Итак, у меня есть модель в Ember, которая генерирует хэш с тремя объектами. Один из объектов - это массив объектов с другим массивом внутри каждого объекта. Мне нужно отсортировать этот самый внутренний массив, но у меня возникают проблемы с этим.Сортировка вложенного массива из модели в 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(); 
    } 
}); 

Я знаю, что я далеко не делать это правильно, но я просто не знаю, как сортировать этот вложенный массив. Я видел примеры контроллеров массивов, но я не знаю, как использовать их для сортировки этого вложенного массива. Если бы кто-нибудь мог привести пример того, как это сделать, это будет очень полезно. Спасибо.

ответ

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') 
}); 

Я раздвоенный его примеру здесь: http://emberjs.jsbin.com/manutu/1/edit?html,js,output

+0

Это выглядит великолепно! Мне нравится :) – Kalman

+0

Сортировка - не единственная встроенная функция, посмотрите здесь функции, начиная с 'Ember.computed.': http://emberjs.com/api/classes/Ember.html – thriqon

+0

О, я делать этот метод больше. Я думаю, что это легче понять. – Logiwan992

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('[email protected]', '[email protected]') 
}); 

Рабочий пример here

+0

Большое вам спасибо. Это сделал трюк! – Logiwan992

Смежные вопросы