114

我试图了解 aRoute和 a之间的区别Resource。我理解的方式Resource有助于将一个Route对象的子路径设置为另一个Route对象。但是当我想到路径也发生默认名称映射时,它还不清楚。

4

1 回答 1

101

请注意,从 1.11.0 开始,this.route仅用于代替this.resource. 来源: http: //guides.emberjs.com/v1.11.0/routing/defining-your-routes/ *

请查看此帖子以获取详细说明。

这是这篇文章的粗略总结(我做了一些修改):

自从更改资源和路由后,很多人对这两者的含义以及它们如何影响命名感到困惑。区别如下:

  • 资源 - 事物(模型)
  • 路线 - 与事物有关

所以这意味着使用路由和资源的路由器可能如下所示:

App.Router.map(function() {
  this.resource("posts", { path: "/" }, function() {
    this.route("new", { path: "/new" });
  });
  this.route("another", { path: "/another" });
});

这将导致创建/使用以下路由:

  • PostsRou​​te、PostsController、PostsView
  • PostsIndexRoute、PostsIndexController、PostsIndexView
  • PostsNewRoute、PostsNewController、PostsNewView
  • 另一个路由,另一个控制器,另一个视图

正如我们从这个例子中看到的,资源会影响正在使用/创建的控制器、路由和视图的命名(“新”路由被视为从属于“帖子”资源)。引用原始来源(我对其进行了修改,因为正如 Patrick M 在评论中正确指出的那样,这很烦人):

这意味着每当您创建资源时,它都会创建一个全新的命名空间。该命名空间以资源命名,所有子路由都将插入其中。

更新:更复杂的嵌套资源示例

考虑以下具有多个嵌套资源的更复杂的示例:

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会创建一个全新的命名空间。这意味着在这种情况下生成的路由将如下所示。如您所见,评论资源的 Route、Controller 和 View 没有以父路由名称为前缀。这意味着将资源嵌套在另一个资源中会重置命名空间(= 创建一个新的命名空间)。

  • PostsRou​​te、PostsController、PostsView
  • PostsIndexRoute、PostsIndexController、PostsIndexView
  • PostsNewRoute、PostsNewController、PostsNewView
  • 评论路由,评论控制器,评论视图
  • CommentsNewRoute、CommentsNewController、CommentsNewView
  • 另一个路由,另一个控制器,另一个视图

Ember Docs中也解释了这种行为。

于 2013-02-20T09:35:56.457 回答