2014-09-05 200 views
0

我想在Ember中嵌套資源,但要能夠使用短URL訪問它們。嵌套的資源和路徑

例如:mysite.com/admin將打開路徑:/路由/型材/設置/管理

是否有可能做這樣的事情 - 採用Ember? 我目前使用Ember 1.7和Ember App Kit。

我嘗試以下,但它不工作:

var Router = Ember.Router.extend(); 

Router.map(function() { 
this.resource('profile', function() { 
    this.resource('profile.settings', { path: '/settings' }, function() { 
     this.resource('profile.settings.admin', { path: '/admin' }); 
    ); 
}); 

感謝。

+0

如果您要嵌套,則不必重複父路由名稱。你的嵌套資源'profile.settings'應該只是'settings',對於'profile.settings.admin'來說,應該只是'admin'。 – MilkyWayJoe 2014-09-05 19:49:47

+1

@MilkyWayJoe如果他想讓路線名稱加前綴,則不行。他要麼嵌套'this.route()'調用,要麼他必須自己添加前綴。建議使用前綴,這樣名稱衝突就不會出現很多路由。 – GJK 2014-09-05 19:54:14

回答

2

您的代碼不起作用,因爲您最內部的資源繼承了最外部資源的/profile路徑和中間資源的/settings。如果你希望它是隻是普通/admin,你必須做這樣的事情:

this.resource('profile', { path: '' }, function() { 
    this.resource('profile.settings', { path: '' }, function() { 
     this.resource('profile.settings.admin', { path: '/admin' }); 
    }); 
}); 

然而,這是怎麼回事,當你有更多的路線,每個想頂層路徑越晦澀。您可能會發現,只需在頂層聲明admin路由,然後使用路由中的redirect掛接即可重定向。

+0

這適用於在根級別只有一個空路徑的資源。如果你有多個,它不能正常工作。 – alexmngn 2014-09-08 14:23:07

+0

這就是爲什麼我提到你最好從頂級路線重定向。這比這更明確。 – GJK 2014-09-08 16:17:57