1

我知道 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 没有访问父资源(我确定这是在路由器配置的“模型”或“设置控制器”挂钩中修复的,我只是不确定哪个/如何)

有什么帮助吗?

4

1 回答 1

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/

于 2013-08-03T07:17:42.910 回答