路线EmberJS内的路线

时间:2013-08-02 12:56:31

标签: ember.js

我知道ember不支持这个,因为http://emberjs.com/guides/routing/defining-your-routes/:“你不能嵌套路由,但你可以嵌套资源”

但是我想做的事似乎是合理的,所以我假设某个地方有支持。

这里的目标是建立一个这样的结构:

this.resource('project', { path: '/project/:project_id' }, function(){

      this.route('manage', function(){
          this.route('settings');
          this.route('team');
          this.route('notifications');
          /* etc */
      });

 });

用语言来说,我希望有一个“管理”部分,其中包含您可以管理的内容的子部分,所有部分都引用了我的“项目”实例。

我可以这样做:

this.resource('project', { path: '/project/:project_id' }, function(){

      this.route('manage.settings',{path : '/manage/settings'});
      this.route('manage.team',{path : '/manage/team'});
      /*etc*/

});

但失败的地方是:

  1. 我无法在资源小节之间共享导航(即,具有由子路径填充的插座的管理模板)
  2. 我的settings.hbs没有访问父资源(我确定这是在路由器配置的“模型”或“setupController”挂钩中修复的,我只是不确定哪个/如何)
  3. 任何帮助?

1 个答案:

答案 0 :(得分:1)

为什么不使用嵌套资源?

this.resource('project', { path: '/project/:project_id' }, function(){
  this.resource('manage', function(){
      this.route('settings');
      this.route('team');
      this.route('notifications');
      /* etc */
  });
});

这与ember指南中描述的帖子/评论资源没有什么不同:http://emberjs.com/guides/routing/defining-your-routes/#toc_nested-resources

  

我希望有一个“管理”部分,其中包含您可以管理的内容的子部分,所有部分都引用了我的“项目”实例。

确定。因此,使用嵌套资源方法,您将拥有manage.hbs模板。要从管理部分或任何子部分引用项目实例,只需使用needs,如下所示:

App.ManageController = Ember.Controller.extend({
  needs: "project",
  projectBinding: "controllers.project"
});

有关详细信息,请参阅http://emberjs.com/guides/controllers/dependencies-between-controllers/

相关问题