EmberJS如何为路线选择模板?

时间:2013-08-17 19:13:29

标签: ember.js routes

我定义了这些路线:

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

我很困惑发生了什么事。有人可以解释一下吗?

2 个答案:

答案 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() { ... });

因为detailsmembers只是正常路线,所以它没有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' });
});

我希望它有所帮助。