2015-05-13 85 views
-1

我創建了一個幫手,我需要訪問當前的路由名稱。我在ES6上使用Ember CLI,因此我無法訪問App對象。如何在Ember的幫手中獲取當前的路線路徑?

這是我的。

import Ember from 'ember'; 

/** 
* {{route-active 'route' ['stringIfActive' ['stringIfNot']]}} 
*/ 
export function routeActive(params/*, hash*/) { 
    var currentRoute = null; // we need this 
    if(! params.length) { 
    return; 
    } 
    return currentRoute === params[0] ? 
    params[1] || 'active' : 
    params[2] || ''; 
} 

export default Ember.HTMLBars.makeBoundHelper(routeActive); 

回答

0

儘管它是一個私有API,但我知道在需要時使用和濫用容器。應用程序控制器具有當前活動的路由作爲名爲currentPath的屬性。

import Ember from 'ember'; 

export default Ember.Handlebars.makeBoundHelper(function(value, options) { 
    var appCtrl = this.container.lookup("controller:application"); 
    return appCtrl.get('currentPath'); 
}); 

這個假設你希望你的幫手簡單的返回值。如果你需要退還其他東西,至少我已經得到了這麼多,我相信你可以從這裏拿走它。

+0

謝謝。如果我找不到任何替代品,我將不得不繼續使用,但據我所知,我們不應該使用此私有API。沒有其他辦法嗎? – Louy

+0

另一種選擇是每個控制器都需要'['application']'而你受到的幫助必須將'currentPath'作爲參數 – sunrize920

+0

這更糟糕。我會繼續使用你的建議。謝謝。 – Louy

1

隨着組件的轉移,獲取路由名稱變得更加困難。最好的辦法是在初始值設定/ router.js添加一個初始化諸如

ember g initializer router 

(來自命令行),和

export function initialize(application) { 
    application.inject('route', 'router', 'router:main'); 
    application.inject('component', 'router', 'router:main'); 
} 

export default { 
    name: 'router', 
    initialize 
}; 

。如果需要,您也可以注入控制器。然後,只需做簡單的

this.get('router.currentRouteName'); 
在JS

,或者

{{router.currentRouteName}} 

模板。

這是我發現得到它的唯一方法,它可靠地觀察到Ember 2.4