为什么我需要在Ember.js中定义索引路由?
以前,我的路线被定义为:为什么我需要在Ember.js中定义索引路由?
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",
});
这是正常的行为呢?
当route
嵌套route
s时,假定父节点有一个index
路由。这是指本指南中:https://guides.emberjs.com/v2.13.0/routing/defining-your-routes/#toc_index-routes
具体地,关键词是:
在嵌套的每个级别(包括顶层),灰烬自动提供名为索引/路的路线。要查看何时发生新的嵌套级别,请检查路由器,无论何时看到一个功能,这都是一个新的级别。
所以,在你的榜样,因为room
嵌套在username
,然后username
得到一个自动index
路线。当您从嵌套中删除room
时,则username
的默认index
路线消失。你可以不指定索引路由,只需提供一个空的回调函数。例如:
this.route('username', {
path: '/:username'
}, function() {});
这将以相同的方式自动创建username/index
路由。
在我早期的灰烬应用程序(1.x中)中的一个,我想索引的路线总是存在的,无论(一致性),所以我定义的变量:
var NO_CHILDREN= function() {};
然后,我可以写我喜欢航线:
this.route('username', {
path: '/:username'
}, NO_CHILDREN);
希望帮助
这很有趣,而不是我所期望的。谢谢,这个答案扩大了我的理解(希望未来其他人)! –
也许你能证明这样一个例子:https://ember-twiddle.com/c310013f69c086cecaa38b1d355c49f3?openFiles=templates.username.hbs%2C&route=%2Fusername我通常不会使用索引路线,而是更具体地命名它们。 – sheriffderek