1

我有一个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.

请问,有人可以帮忙吗?谢谢你。

4

1 回答 1

3

一般来说,如果没有定义,每条路由都会有一个默认控制器。在控制器 A 中,这行代码将在数据表、文档、应用程序控制器及其相应路由的操作哈希中this.send('makeItHappen');查找方法,如果在任何地方定义,则不会出现此错误。makeItHappenmakeItHappen

为了实现您所需要的,目前,在您的路由/控制器层次结构中,控制器-A 和控制器-B 之间没有父子关系。所以你可以在控制器A中注入控制器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');
    }
  }
});
于 2017-01-16T15:11:40.330 回答