我正在使用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);
}
}
});
我该如何解决?
答案 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')
});
答案 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
进行查找。