我有一个控制器A
,它使用this.send('makeItHappen')
发送了一个操作,我想在控制器B
中处理它。我该怎么做?
JS:
// controllers/documents/datasets/controller-A
import Ember from 'ember';
export default Ember.Controller.extend({
actions: {
sendToDataCenter() {
this.send('makeItHappen'); // this throws an error
}
}
});
// controllers/controller-B
import Ember from 'ember';
export default Ember.Controller.extend({
actions: {
makeItHappen() {
console.log('It works!!');
}
}
});
在控制器B中,它会抛出一个错误:
Uncaught Error: Nothing handled the action 'makeItHappen'. If you did handle the action, this error can be caused by returning true from an action handler in a controller, causing the action to bubble.
拜托,有人可以帮忙吗?谢谢。
答案 0 :(得分:2)
通常,如果未定义,每条路线都将有一个默认控制器。
在控制器-A中,如果在任何地方定义了this.send('makeItHappen');
,那么这行代码makeItHappen
将在数据表,文档,应用程序控制器及其相应路由的动作哈希中查找makeItHappen
方法不会出现这个错误。
实现您的需求,
目前,在您的路由/控制器层次结构中,控制器-A和控制器-B之间没有父子关系。所以你可以将控制器-B注入控制器-A并直接调用makeItHappen
。
// controllers/documents/datasets/controller-A
import Ember from 'ember';
export default Ember.Controller.extend({
controllerB:Ember.inject.controller('controller-B');//this should be already instantiated ie,this corresponding route should be visited earlier otherwise you will get `unknown injection: controller:users' Error
actions: {
sendToDataCenter() {
this.get('controllerB').send('makeItHappen');
}
}
});