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
, прикрепленное к нему. Есть ли лучший способ?
EDIT: я сделал некоторое обновление кода выше. Кроме того, мои маршруты выглядят так:
App.Router.map(function() {
this.resource('project', { path: '/project/:project_id' });
this.resource('task', { path: 'project/:project_id/task/:task_id' });
});