我正在使用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