在 Ember 中,如何在另一个控制器中处理从一个控制器发送的操作
In Ember, how can I handle an action sent from a controller in another controller
我有一个控制器 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.
拜托,有人可以帮忙吗?谢谢。
一般情况下,如果没有定义,每条路由都会有一个默认控制器。
在controller-A中,如果makeItHappen
定义在任何地方,这行代码this.send('makeItHappen');
将在数据表、文档、应用程序控制器及其对应路由的操作散列中查找makeItHappen
方法那么就不会出现这个错误了。
要实现您的需求,
目前,在您的 route/controller 层次结构中,controller-A 和 controller-B 之间没有 parent-child 关系。所以你可以在 controller-A 中注入 controller-B 并直接调用 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');
}
}
});
我有一个控制器 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.
拜托,有人可以帮忙吗?谢谢。
一般情况下,如果没有定义,每条路由都会有一个默认控制器。
在controller-A中,如果makeItHappen
定义在任何地方,这行代码this.send('makeItHappen');
将在数据表、文档、应用程序控制器及其对应路由的操作散列中查找makeItHappen
方法那么就不会出现这个错误了。
要实现您的需求,
目前,在您的 route/controller 层次结构中,controller-A 和 controller-B 之间没有 parent-child 关系。所以你可以在 controller-A 中注入 controller-B 并直接调用 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');
}
}
});