如何使用Ember CLI正确生成资源和路由

时间:2014-07-24 07:01:53

标签: ember.js ember-cli

我尝试使用Ember CLI定义这样的资源和路由。

    this.resource('events', function() {
        this.route('view', { path: "/:id"})
    });

如果我试试这个:ember g resource events/view我明白了:

this.resource('events/view', { path: 'events/views/:events/view_id' });

如果我试试这个:ember g resource events 并且:ember g resource events/view

this.resource('events', { path: 'events/:events_id' });
this.resource('events/view', { path: 'events/views/:events/view_id' });

如果我试试这个:ember g resource events 并且:ember g route events/view

this.resource('events', { path: 'events/:events_id' });
this.route('events/view');

有办法做到这一点吗?

2 个答案:

答案 0 :(得分:19)

此时,使用Ember CLI中的默认蓝图不会自动生成所需模式中的嵌套资源和路由。默认蓝图生成骨架文件和文件结构,有些使用其afterInstall挂钩更新其他文件。按照这些默认蓝图,您正在正确生成这些项目:

    ember g resource events
    ember g route events/view

然后,您可以使用预期的嵌套修改router.js中的Router.map:

    Router.map(function() {
      this.resource('events', function() {
        this.route('view', { path: "/view/:id" });
      })
    });

您现在应该可以点击事件/查看/ 1'在浏览器中,查看您在Ember Inspector's路线标签中寻找的路线。

或者,您可以执行以下操作,并生成自定义蓝图:

    ember generate blueprint nested-resource-route

将在项目根目录中创建一个蓝图目录,其中包含新的蓝图。使用资源和路线蓝图作为基础,您可以使用自己的生成器来完成您正在寻找的目标。

答案 1 :(得分:11)

你想要的行为可以在ember-cli 0.1.5及更高版本中使用。来自release notes

  

#2748改进了路由器生成器以支持正确嵌套   路线和资源,以前如果你有类似的路线:

Router.map(function() {
  this.route("foo");
});
     

你做了ember g route foo/bar生成的路线将是

Router.map(function() {
  this.route("foo");
  this.route("foo/bar");
});
     

现在它可以正确管理嵌套路由,结果如下:

Router.map(function() {
  this.route("foo", function() {
    this.route("bar");
   }); 
});
     

此外,还添加了选项--path,以便您可以执行ember g route friends/edit --path=:friend_id/id创建嵌套的操作   friends下的路线,如:this.route('edit', {path: ':friend_id/edit'})