Вызов метода контроллера в другом контроллере Ember

Я использую Ember Need Api для вызова метода контроллера в другом контроллере. Я могу получить экземпляр контроллера, но когда я вызываю его метод, он возвращает мне эту ошибку TypeError: Object [object Object] has no method.

Вот как я это называю:

Cards.CardsIndexController = Ember.Controller.extend({
    needs: 'account_info',
     actions: {
        accountInfoStart:function(){
               console.log(this.get('controllers.account_info').test()); // error here


        }
    }
});

Это контроллер, функцию которого я хочу вызвать

Cards.AccountInfoController = Ember.Controller.extend({


    actions:{

        test: function(){

            alert(1);
        }

    }

});

Как я могу это решить?


person mohsinali1317    schedule 04.04.2014    source источник


Ответы (3)


test технически это не метод, а действие или событие. Вместо этого используйте метод send:

this.get('controllers.account_info').send('test', arg1, arg2);
person GJK    schedule 04.04.2014
comment
Для людей, которым это нужно для работы с вложенными папками, вот решение: stackoverflow.com/a/29269015/499700 - person poweratom; 26.03.2015

Согласно документации Ember; создайте свойство, которое лениво ищет другой контроллер в контейнере. Это можно использовать только при определении другого контроллера.

пример устаревшего приложения ember:

App.PostController = Ember.Controller.extend({
  accountInfo: Ember.inject.controller()

  this.get('accountInfo').send('test')
});

пример современного приложения ember:

// in an ember app created with ember-cli
// below snippet would be the app/controllers/post.js file
import Ember from 'ember';
export default Ember.Controller.extend({
  appController: Ember.inject.controller('application')
});

Вы можете найти дополнительную документацию по Ember.inject здесь

person Ziyad Al Obaidi    schedule 22.10.2016
comment
Для пользователей, путешествующих по сети, этот ответ наиболее точен для приложений, работающих под управлением Ember 2.x и выше. - person efx; 29.06.2017

Из обновленной документации Ember:

import { inject } from '@ember/controller';
export default Ember.Controller.extend({
  appController: inject('application')
});

Для дальнейшего ознакомления вы можете узнать по этой ссылке https://guides.emberjs.com/release/applications/dependency-injection/

person Rakchamp25    schedule 12.06.2019