新路由器API中的路由和资源有什么区别?
我想了解Route
和Resource
之间的区别。 我了解Resource
的方式有助于将Route
对象的子path设置为另一个Route
对象。 但是,当我想到默认名称映射发生path时,它也不清楚。
请注意,从1.11.0开始,仅使用
this.route
代替this.resource
。 资料来源: http : //guides.emberjs.com/v1.11.0/routing/defining-our-routes/ *
看看这个post的详细解释。
这是这篇文章的粗略总结(我修改了一下):
自改变资源和路线以来,很多人对这两者的含义以及它们如何影响命名感到困惑。 以下是区别:
- 资源 – 一件事(一个模型)
- 路线 – 与事情有关
所以这意味着使用路由和资源的路由器可能如下所示:
App.Router.map(function() { this.resource("posts", { path: "/" }, function() { this.route("new", { path: "/new" }); }); this.route("another", { path: "/another" }); });
这将导致创build/使用以下路由:
- PostsRoute,PostsController,PostsView
- PostsIndexRoute,PostsIndexController,PostsIndexView
- PostsNewRoute,PostsNewController,PostsNewView
- AnotherRoute,AnotherController,AnotherView
正如我们从这个例子中看到的,资源影响正在使用/创build的控制器,路由和视图的命名(“新”路由被视为从属于“post”资源)。 引用来自原始来源(我修改了它,因为正如Patrick M在评论中正确指出的那样令人讨厌):
这意味着每当你创build一个资源时,它将创build一个全新的名字空间。 该名称空间以资源命名,并且所有子路由都将被插入到该名称空间中。
更新:嵌套资源的更复杂的例子
考虑下面更多复杂的嵌套资源的例子:
App.Router.map(function() { this.resource("posts", { path: "/" }, function() { this.route("new", { path: "/new" }); this.resource("comments", { path: "/comments" }, function() { this.route("new", { path: "/new" }); }); }); this.route("another", { path: "/another" }); });
在这种情况下,资源comments
会创build一个全新的名称空间。 这意味着在这种情况下产生的路线如下。 正如你可以看到路由,注释资源的控制器和视图没有前缀的父路由的名称。 这意味着在另一个资源中嵌套资源会重置命名空间(=创build一个新的命名空间)。
- PostsRoute,PostsController,PostsView
- PostsIndexRoute,PostsIndexController,PostsIndexView
- PostsNewRoute,PostsNewController,PostsNewView
- CommentsRoute,CommentsController,CommentsView
- 评论NewRoute,评论NewController,评论NewView
- AnotherRoute,AnotherController,AnotherView
Ember文档中也解释了这种行为。