2017-05-12 31 views
3

以前,我的路線被定義爲:爲什麼我需要在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

回答

3

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

這很有趣,而不是我所期望的。謝謝,這個答案擴大了我的理解(希望未來其他人)! –

相關問題