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

wil*_*amt 17 ember.js ember-cli

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

    this.resource('events', function() {
        this.route('view', { path: "/:id"})
    });
Run Code Online (Sandbox Code Playgroud)

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

this.resource('events/view', { path: 'events/views/:events/view_id' });
Run Code Online (Sandbox Code Playgroud)

如果我试试这个: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' });
Run Code Online (Sandbox Code Playgroud)

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

this.resource('events', { path: 'events/:events_id' });
this.route('events/view');
Run Code Online (Sandbox Code Playgroud)

有没有办法做到这一点?

jac*_*arm 19

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

    ember g resource events
    ember g route events/view
Run Code Online (Sandbox Code Playgroud)

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

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

您现在应该能够在浏览器中点击"events/view/1",并在Ember Inspector的 Routes选项卡中查看您一直在寻找路线.

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

    ember generate blueprint nested-resource-route
Run Code Online (Sandbox Code Playgroud)

将在项目根目录中创建一个蓝图目录,其中包含新的蓝图.使用资源和路线蓝图作为基础,您可以使用自己的发电机来完成您所寻求的目标.


Ian*_*nVS 11

你想要的行为可以在ember-cli 0.1.5及更高版本中使用.从发行说明:

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

Router.map(function() {
  this.route("foo");
});
Run Code Online (Sandbox Code Playgroud)

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

Router.map(function() {
  this.route("foo");
  this.route("foo/bar");
});
Run Code Online (Sandbox Code Playgroud)

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

Router.map(function() {
  this.route("foo", function() {
    this.route("bar");
   }); 
});
Run Code Online (Sandbox Code Playgroud)

此外,该选项 --path 已添加,因此您可以执行以下操作:例如ember g route friends/edit --path=:friend_id/id 在以下情况下创建嵌套路由 friends : this.route('edit', {path: ':friend_id/edit'})