新路由器API中的路由和资源有什么区别?

我想了解RouteResource之间的区别。 我了解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/使用以下路由:

  • PostsRou​​te,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一个新的命名空间)。

  • PostsRou​​te,PostsController,PostsView
  • PostsIndexRoute,PostsIndexController,PostsIndexView
  • PostsNewRoute,PostsNewController,PostsNewView
  • CommentsRou​​te,CommentsController,CommentsView
  • 评论NewRoute,评论NewController,评论NewView
  • AnotherRoute,AnotherController,AnotherView

Ember文档中也解释了这种行为。