2015-05-13 5 views
-1

Я создаю помощника, и мне нужно получить доступ к текущему названию маршрута. Я использую Ember CLI с ES6, и поэтому у меня нет доступа к объекту 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

С переходом на компоненты сложнее получить название маршрута. Самый лучший способ, чтобы добавить инициализатор, такую ​​как

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

через Инициализаторы/router.js. Вы также можете ввести в контроллер, если вам нужно. Тогда просто сделать просто

this.get('router.currentRouteName'); 

в JS или

{{router.currentRouteName}} 

в шаблоне.

Это единственный способ, которым я нашел, чтобы надежно его видеть и наблюдать в Ember 2.4.

Смежные вопросы