为什么我需要在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", 
}); 

这是正常的行为呢?

+0

也许你能证明这样一个例子:https://ember-twiddle.com/c310013f69c086cecaa38b1d355c49f3?openFiles=templates.username.hbs%2C&route=%2Fusername我通常不会使用索引路线,而是更具体地命名它们。 – sheriffderek

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); 

希望帮助

+2

这很有趣,而不是我所期望的。谢谢,这个答案扩大了我的理解(希望未来其他人)! –