Ember.Route.model
имеет доступ к переменной params
, а Ember.Route.setupController
— нет. Для меня это проблематично, потому что мой путь состоит из нескольких динамических сегментов, и мне нужно использовать их все в моем шаблоне.
Конкретно мой путь выглядит так: /project/:project_id/task/:task_id
. Обратите внимание, что задача может принадлежать многим проектам, а не только одному. Поэтому мы не можем сказать, какой проект мы рассматриваем, просто взглянув на саму задачу: мы должны использовать идентификатор проекта, найденный в URL-адресе. Вот как я это делаю сейчас:
App.TaskRoute = Ember.Route.extend({
// This works just fine:
serialize: function(model) {
return {
task_id: model.get('id'),
project_id: this.modelFor('project').get('id')
};
},
model: function(params) {
this.set('parentProjectId', params.project_id);
return App.Task.find(params.task_id);
},
setupController: function(controller, model) {
var parentProject = this.modelFor('project') ?
this.modelFor('project') :
App.Project.find(this.get('parentProjectId'));
controller.set('parentProject', parentProject);
controller.set('content', model);
}
});
Может быть, я параноик, это просто кажется хакерским. Если бы маршрут должен был иметь доступ к параметрам, то к нему уже было бы прикреплено свойство params
. Есть ли способ лучше?
РЕДАКТИРОВАТЬ: я сделал некоторые обновления кода выше. Кроме того, мои маршруты выглядят так:
App.Router.map(function() {
this.resource('project', { path: '/project/:project_id' });
this.resource('task', { path: 'project/:project_id/task/:task_id' });
});