以前,我的路线已定义:
this.route('username', {
path: '/:username'
}, function() {
this.route("room", {
path: "/:room",
});
我把它改为:
this.route('username', {
path: '/:username'
}, function() {
this.route('index')
});
this.route("room", {
path: "/:room"
});
这很好用。但是除非我在username/index
中明确定义索引,否则我的router.js
路由不会加载。
以下不工作:
this.route('username', {
path: '/:username'
});
this.route("room", {
path: "/:room",
});
这是正常行为吗?
答案 0 :(得分:3)
当route
嵌套route
时,假定父级有index
路由。这在指南中引用了这个:https://guides.emberjs.com/v2.13.0/routing/defining-your-routes/#toc_index-routes
特别是,关键短语是:
在每个嵌套级别(包括顶级),Ember自动为/ path命名索引提供路由。要查看何时出现新的嵌套级别,请在看到某个功能时检查路由器,这是一个新级别。
因此,在您的示例中,由于room
嵌套在username
中,因此username
会获得自动index
路由。从嵌套中删除room
后,index
的默认username
路由就会消失。
仅供参考,您甚至不必指定索引路由,只需提供空回调即可。 e.g:
this.route('username', {
path: '/:username'
}, function() {});
通过自动创建username/index
路线,这将以相同的方式工作。
在我早期的一个Ember应用程序(1.x)中,我希望索引路径始终存在,无论(为了一致性),所以我定义了一个变量:
var NO_CHILDREN= function() {};
然后我可以编写我的路线,如:
this.route('username', {
path: '/:username'
}, NO_CHILDREN);
希望有所帮助