我尝试使用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');
有办法做到这一点吗?
答案 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'})