Ember.js сортировка и фильтрация дочерних элементов отношения hasMany в родительском маршруте
Обновление № 2
Я обнаружил, что когда я реорганизовал логику фильтрации, чтобы она выполнялась в составном вычисляемом свойстве в PostController, а не в отдельных маршрутах, я смог заставить его работать. В конечном итоге решение зависело от единственной динамической переменной, заданной конкретным действием маршрута #linkTo, которое вызвало изменения фильтрации в вычисляемом свойстве PostController. У меня много работы, чтобы наверстать упущенноеЯ не могу опубликовать решение этого конкретного вопроса сейчас, но когда смогу, я подробно опишу решение ниже. Пока я пометил @twinturbo 's правильный ответ на частичное, но невероятно полезное руководство, которое он дал ниже. Еще раз спасибо, человек! Очень признателен!!
Обновление № 1
Последняя скрипка наhttp://jsfiddle.net/aZNRu/14/ с @twinturbo 'помощь, сортировкаранг" Атрибут Комментариев в своем родительском контроллере Post работает вместе с базовой фильтрацией. Проблема с автоматическим обновлением представлений по-прежнему возникает при фильтрации по маршруту и создании нового комментария.
Оригинальный вопрос
я вижу эторечь идет о сочетании сортируемого миксина с фильтрацией, но пока, как вы можете видеть в моемпример jsfiddleЯУ меня проблемы с сортировкой и фильтрацией:
1) я могуt выяснить, как сортировать по определенному дочернему атрибуту в контроллере его родителя. Если у нас есть:
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');
});
});
});
Я хочу иметь возможность сортировать каждый посткомментарии в порядке возрастанияранг" приписывать. Я хочу сделать что-то вроде:
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);
}
});
{{#each comment in filteredComments}}
{{comment.rank}} {{comment.description}} - isActive: {{comment.isActive}}
{{/each}}
Будем очень благодарны за любые идеи, которые вы можете дать по этим вопросам!