2013-03-07 6 views
4

В emberjs pre2 мы могли бы получить доступ к контроллеру или любой метод в контроллере от другого контроллера в следующим образом:Emberjs - как метод доступа одного контроллера от другого контроллера»

App.get („маршрутизатор“) .get ('NavController') метод1().

Может ли кто-нибудь предложить, какой может быть аналогичный код для emberjs rc1?

Благодаря

+0

Я пытался следовать данным вниз по парадигме. Как вы делаете что-то подобное, используйте предложенную инъекцию зависимостей @Def_Os, но делайте это на маршруте приложения. –

ответ

3

Внутри Controller или Route вы можете попробовать

this.controllerFor("nav").method1() 

Внимание

Это был правильный ответ, когда вопрос был задан, но так как controllerFor устарела, пожалуйста, проверьте ответ joscas

+0

В этом случае вы можете принять ответ, нажав на галочку слева –

+0

Есть ли способ вызова метода контроллера из представления? –

+5

На самом деле контроллерFor устарел .... так что мы должны использовать потребности –

17

С controllerFor устарела, я считаю, что более правильным способом было бы с потребностями:

this.get('controllers.nav').method1() 

Это требует объявить ваши потребности в контроллере:

App.YourController = Ember.ObjectController.extend({ 
    needs: ['nav'], 
    .... 
+1

Это должен быть новый принятый ответ. – DelphiLynx

+0

Документы: http://emberjs.com/guides/controllers/dependencies-between-controllers/ – givanse

2

В Ember 2, это работает , впрыскивая контроллер, к которому вы хотите получить доступ:

export default Ember.Controller.extend({ 
    nav: Ember.inject.controller(), 
}); 

Или, если вы хотите, чтобы указать имя, отличное от имени контроллера:

export default Ember.Controller.extend({ 
    navController: Ember.inject.controller('nav'), 
}); 

Вы можете получить доступ к методам инжектированного контроллера, как это:

this.get('navController').method1() 
+1

Я пытаюсь следовать парадигме данных вниз. Как вы делаете что-то подобное, используйте предложенную инъекцию зависимостей @Def_Os, но делайте это на маршруте приложения. Затем вместо прямого вызова метода просто отправьте действие и дайте ему перейти к маршруту приложения. Это позволяет избежать сложной прямой зависимости между двумя контроллерами, которым трудно управлять в крупных проектах. –

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