在另一个控制器 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);
        }
    }
});

我该如何解决?

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

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

根据 Ember 文档; 创建一个在容器中懒惰查找另一个控制器的属性。这只能在定义另一个控制器时使用。

旧版 Ember 应用程序示例:

App.PostController = Ember.Controller.extend({
  accountInfo: Ember.inject.controller()
  this.get('accountInfo').send('test')
});

现代余烬应用示例:

// 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的更多文档

来自更新的 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

最新更新