2013-04-09 3 views
25

Есть ли какой-либо надежный способ доступа к контроллеру с маршрута?Как получить доступ к контроллеру с маршрута в Ember?

<a href="#" class="btn" {{action "someAction" user}}>add</a> 

App.ApplicationRoute = Ember.Route.extend 
    events: 
    someAction: (user) -> 
     console.log 'give me name from currentUser controller' 

SomeAction очень общий, и я считаю, что ApplicationRoute - лучшее место для него.

ответ

25

Я думаю, что метод controllerFor должен быть доступен в этом случае:

App.ApplicationRoute = Ember.Route.extend 
    events: 
    someAction: (user) -> 
     console.log this.controllerFor("currentUser").get("name") 

Update в ответ на вопросы в commments:

Это все зависит от того, что вы хотите сделать. Беспокойство о СУШЕ на такой базовый метод, не имеет особого значения imho.

В ваших престижности оставил случай я хотел бы сделать это:

App.ApplicationRoute = Ember.Route.extend 
    events: 
    someAction: (user) -> 
     this.controllerFor("currentUser").decrementKudos(); 
     // implement the decrementKudos in your controller 

Но я думаю, хранение этого один контроллер должен также работать, если это слишком много кода для вас:

App.ApplicationRoute = Ember.Route.extend 
    currentUserCon : this.controllerFor("currentUser") 
    events: 
    someAction: (user) -> 
     this.currentUserCon.decrementKudos(); 
     // implement the decrementKudos in your controller 
+0

Спасибо, но возможно ли получить ссылку на это свойство, например, можно ли хранить его в переменной, чтобы я мог работать на нем? 'name = this.controllerFor ('currentUser'). Get 'name'' ' return' hello, # {name} ' Возможно ли? Доступ к контроллерам таким образом много раз не DRY :) – wryrych

+0

Например это будет излишним: 'this.controllerFor ('currentUser'). set 'kudosLeft', this.controllerFor ('currentUser'). get 'kudosLeft' - 1' :) – wryrych

+1

См. мой обновленный ответ. – mavilein

7

В более новой версии ember вы можете получить доступ к контроллеру текущего маршрута по маршруту ниже

Эмбер версия 2.5

currentUserCon : this.controller 

Если вы хотите получить доступ к другим контроллерам маршрутов, используйте метод controllerFor.

this.controllerFor('path to controller'); //put path to controller as parameter. 
+1

I ' (по крайней мере, в моем приложении Ember 2.14), что 'this.controller' является' undefined', по крайней мере, с помощью маршрутного маршрута 'activate()', но 'controllerFor ('cu rrent.route.name ') 'вернет контроллер. –

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