Answers:
请注意,从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" });
});
这将导致以下路由的创建/使用:
从该示例中我们可以看到,资源影响了正在使用/创建的Controllers,Routes和Views的命名(“ new”路由被视为从属于“ 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中也对此行为进行了解释。
That namespace will have an " which [...]
。什么"
意思 它只是Route的占位符| 控制器| 视图?
App.Router.map(function() { this.route("posts", { path: "/" }, function() { this.route("new"); this.route("comments"}, function() { this.route("new"); }); }); this.route("another", { path: "/another" }); });