在另一个控制器Ember中调用控制器方法

时间:2014-04-04 11:16:53

标签: ember.js ember-controllers

我正在使用Ember的Ne​​ed 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);
        }

    }

});

我该如何解决?

3 个答案:

答案 0 :(得分:12)

test在技术上不是一种方法,而是一种动作或事件。改为使用send方法:

this.get('controllers.account_info').send('test', arg1, arg2);

答案 1 :(得分:6)

根据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')
});

您可以找到更多documentation about Ember.inject here

答案 2 :(得分:1)

来自更新后的Ember文档:

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

有关更多参考,您可以通过此链接https://guides.emberjs.com/release/applications/dependency-injection/#toc_ad-hoc-injections

进行查找。