Ember.Route.model
可以访问params
变量,但Ember.Route.setupController
没有。这对我来说很麻烦,因为我的路径有多个动态段,我需要在我的模板中使用它们。
具体来说,我的路径如下所示/project/:project_id/task/:task_id
:请注意,一项任务可以属于多个项目,而不仅仅是一个。因此,我们无法仅通过查看任务本身来判断我们正在查看的项目:我们必须使用在 URL 中找到的项目 ID。这是我目前的做法:
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);
}
});
也许我是偏执狂,这只是感觉 hacky。如果该路由旨在访问参数,那么它已经params
附加了一个属性。有没有更好的办法?
编辑:我对上面的代码做了一些更新。此外,我的路线如下所示:
App.Router.map(function() {
this.resource('project', { path: '/project/:project_id' });
this.resource('task', { path: 'project/:project_id/task/:task_id' });
});