0

我定义了这些路线:

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

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

4

2 回答 2

1

这与模板无关。您尚未为 ProjectDetails 路由定义模型。你可以这样做:

App.ProjectDetailsRoute = Em.Route.extend({
  model: function() {
    return this.modelFor('project');
  }
});
于 2013-08-17T21:01:45.733 回答
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() { ... });

所以因为detailsand members, 只是普通路线,它没有model.

当您将模板更改project/details为 时project,一切正常,因为:

你转换到project.details,首先转换到project路由,因为你已经声明了this.resource('project'...)。并且因为它是动态分段路由,所以App.Project会返回实例,并将您的模板呈现绑定到 this model

在此之后,子路由project.details被转换,但这一次,模板project.details不存在。所以什么都没有渲染。

我认为解决方案是@alexspeller 的答案,或者:

this.resource('project', function() {
    this.route('details', { path: 'details/:project_id' });
    this.route('members', { path: 'members/:project_id' });
});

我希望它有所帮助。

于 2013-08-17T21:49:13.773 回答