New Router API中的路由和资源有什么区别?

时间:2013-02-20 06:25:57

标签: ember.js ember-router

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

1 个答案:

答案 0 :(得分:102)

  

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

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

这是这篇文章的粗略总结(我已经修改了一下):

  

自从改变资源和路线以来,很多人都是   困惑于两者的含义以及它们如何影响命名。   这是区别:

     
      
  • 资源 - 一件事(模特)
  •   
  • 路线 - 与事物有关的事情
  •   

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

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
  • AnotherRoute,AnotherController,AnotherView

正如我们从这个例子中看到的那样,资源影响正在使用/创建的控制器,路由和视图的命名(“新”路由被视为从属于“posts”资源)。引用原始来源(我对其进行了修改,因为正如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
  • CommentsRou​​te,CommentsController,CommentsView
  • CommentsNewRoute,CommentsNewController,CommentsNewView
  • AnotherRoute,AnotherController,AnotherView

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