Ember.js сортировка и фильтрация дочерних элементов отношения hasMany в родительском маршруте

Обновление № 2

Я обнаружил, что когда я реорганизовал логику фильтрации, чтобы она выполнялась в составном вычисляемом свойстве в PostController, а не в отдельных маршрутах, я смог заставить его работать. В конечном итоге решение зависело от единственной динамической переменной, заданной конкретным действием маршрута #linkTo, которое вызвало изменения фильтрации в вычисляемом свойстве PostController. У меня много работы, чтобы наверстать упущенное, поэтому я не могу опубликовать решение этого конкретного вопроса сейчас, но когда смогу, я подробно опишу решение ниже. На данный момент я пометил ответ @ twinturbo как правильный для частичного, но невероятно полезного руководства, которое он дал ниже. Еще раз спасибо, человек! Очень признателен!!

Обновление № 1

Последняя скрипка наhttp://jsfiddle.net/aZNRu/14/ с помощью @ twinturbo работает сортировка атрибута «rank» Комментариев в родительском контроллере Post вместе с базовой фильтрацией. Проблема с автоматическим обновлением представлений по-прежнему возникает при фильтрации по маршруту и создании нового комментария.

Оригинальный вопрос

я вижу эторечь идет о сочетании сортируемого миксина с фильтрацией, но пока, как вы можете видеть в моемпример jsfiddleУ меня проблемы с сортировкой и фильтрацией:

1) Я не могу понять, как сортировать по определенному дочернему атрибуту в контроллере его родителя. Если мы имеем:

App.Post = DS.Model.extend({
    title: DS.attr('string'),
    post: DS.attr('string'),
    comments: DS.hasMany('App.Comment')
});

App.Comment = DS.Model.extend({
    post: DS.belongsTo('App.Post'),
    description: DS.attr('string'),
    isActive: DS.attr('boolean'),
    rank: DS.attr('number')
});

App.Router.map(function() {
  this.resource("posts", { path: "/" }, function() {
    this.resource('post', { path: ':post_id' }, function() {
        this.route('active');
        this.route('inactive');
     });
   });
});

Я хочу иметь возможность сортировать комментарии каждого поста в порядке возрастания по его атрибуту "rank". Я хочу сделать что-то вроде:

App.PostController = Ember.ObjectController.extend({
    sortProperties: ['comments.rank']

но, с одной стороны, я думаю, что sortProperties работает только на arrayControllers, и я не думаю, что он может работать более чем на один уровень. Как я мог этого добиться?

2) Вторая проблема - не получить автоматически обновляемые представления при отфильтрованном маршруте. Например, если вы просматриваете jsfiddle и переходите к активному отфильтрованному маршруту, нажимая «Активные комментарии», вы получаете хороший эффект фильтрации текущих данных. Но если вы остаетесь в активном маршруте и создаете новую активную запись, нажимая «Добавить новый комментарий», запись не отображается автоматически в «Активном», а появляется только в том случае, если вы щелкнете по другому маршруту и вернетесь к нему.

Я неправильно настраиваю фильтрацию маршрута в маршруте или неправильно указываю в шаблоне?

App.PostActiveRoute = Ember.Route.extend({
  setupController: function() {
    var post = this.controllerFor('post').get('model'),
    comments = post.get('comments');

    var activeComments = comments.filter(function(comment) {
      if (comment.get('isActive')) { return true; }
    });

    this.controllerFor('post').set('filteredComments', activeComments);
  }
});


<ul>
    {{#each comment in filteredComments}}
        <li>{{comment.rank}} {{comment.description}} - isActive: {{comment.isActive}}</li>
    {{/each}}
</ul>

Будем очень благодарны за любые идеи, которые вы можете дать по этим вопросам!

Ответы на вопрос(3)

Ваш ответ на вопрос