我想了解Route
和Resource
之间的区别。我理解Resource
的方式有助于将Route
对象的子路径设置为另一个Route
对象。但是当我想到路径的默认名称映射时,我还不清楚。
答案 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" });
});
这将导致创建/使用以下路由:
正如我们从这个例子中看到的那样,资源影响正在使用/创建的控制器,路由和视图的命名(“新”路由被视为从属于“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不以父路由的名称为前缀。这意味着将资源嵌套在另一个资源中会重置命名空间(=创建一个新的命名空间)
Ember Docs中也解释了这种行为。