我定义了这些路线:
this.resource('projects', function() {
this.resource('project', { path: ':project_id'}, function() {
this.route('details');
this.route('members');
});
});
我认为按照惯例,project.details路线会寻找“项目/细节”模板。但奇怪的是,它没有得到正确的模型。见http://jsbin.com/ELaxigE/19/edit
现在,如果我创建“项目”模板,而不是提供“项目/细节”模板,那么它可以工作。见http://jsbin.com/ELaxigE/21/edit
我很困惑发生了什么事。有人可以解释一下吗?
答案 0 :(得分:1)
这与模板无关。您尚未为ProjectDetails路由定义模型。你可以这样做:
App.ProjectDetailsRoute = Em.Route.extend({
model: function() {
return this.modelFor('project');
}
});
答案 1 :(得分:0)
给出一条路线。当模型钩子没有定义,并且有一个以_id
结尾的动态段:
this.route('edit', { path: ':user_id' });
这将生成如下路线:
App.EditRoute = Ember.Route.extend({
model: function(params) {
return App.User.find(params.id);
}
});
在您的情况下,唯一的动态细分路线为project
,因为:project_id
。
this.resource('project', { path: ':project_id'}, function() { ... });
因为details
和members
只是正常路线,所以它没有model
。
当您将模板project/details
更改为project
时,事情可行,因为:
您转换为project.details
,首先转换为project
路由,因为您已声明this.resource('project'...)
。由于它是动态分段路由,因此返回App.Project
实例,并将您的模板呈现为绑定到此model
。
此后,子路由project.details
已转换,但这次模板project.details
不存在。所以什么也没有呈现。
我认为解决方案是@alexspeller答案,或者:
this.resource('project', function() {
this.route('details', { path: 'details/:project_id' });
this.route('members', { path: 'members/:project_id' });
});
我希望它有所帮助。