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

Posted

技术标签:

【中文标题】如何使用 Ember CLI 正确生成资源和路由【英文标题】:How to properly generate resources and routes with Ember CLI 【发布时间】:2014-09-15 14:46:49 【问题描述】:

我正在尝试使用 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');

有没有办法做到这一点?

【问题讨论】:

【参考方案1】:

目前,您希望的模式中的嵌套资源和路由不会使用 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" );
      )
    );

您现在应该可以在浏览器中点击“events/view/1”,并在Ember Inspector's Routes 选项卡中查看您一直在寻找的路线。

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

    ember generate blueprint nested-resource-route

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

【讨论】:

感谢您详细说明所有这些内容。我在试图找出资源与路由时遇到了 Ember 101 问题,尤其是在嵌套方面,而这正是我解决问题和理解原始问题所需要的。【参考方案2】:

您想要的行为在 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')

【讨论】:

以上是关于如何使用 Ember CLI 正确生成资源和路由的主要内容,如果未能解决你的问题,请参考以下文章

将LoDash与EmberCLI一起使用

如何为特定浏览器导入脚本 Ember-CLi Broccoli

content-for 'head' Ember-cli

Ember CLI 和代码覆盖率

如果使用 RestSerializer,就不能使用速记路由处理程序? (余烬-cli-海市蜃楼)

使用 Symfony 2 CLI 工具,如何为子类生成具有正确类型提示的 getter 和 setter?