Javascript 在Ember中,如何处理从另一个控制器中的控制器发送的操作

Javascript 在Ember中,如何处理从另一个控制器中的控制器发送的操作,javascript,ember.js,web-applications,ember-controllers,Javascript,Ember.js,Web Applications,Ember Controllers,我有一个控制器a,它用this.send('makeItHappen')发送了一个操作,我想在控制器B中处理它。我该怎么做 JS: 在控制器B中,它抛出一个错误: Uncaught错误:没有处理操作“makeItHappen”。如果确实处理了该操作,则控制器中的操作处理程序返回true会导致该错误,从而导致该操作冒泡。 拜托,有人能帮忙吗?谢谢。通常,如果未定义每条路线,则每条路线将有一个默认控制器。 在控制器A中,这行代码this.send('makeItHappen')将在数据表、文档、应用

我有一个控制器
a
,它用
this.send('makeItHappen')
发送了一个操作,我想在控制器
B
中处理它。我该怎么做

JS:

在控制器B中,它抛出一个错误:
Uncaught错误:没有处理操作“makeItHappen”。如果确实处理了该操作,则控制器中的操作处理程序返回true会导致该错误,从而导致该操作冒泡。


拜托,有人能帮忙吗?谢谢。

通常,如果未定义每条路线,则每条路线将有一个默认控制器。 在控制器A中,这行代码
this.send('makeItHappen')
将在数据表、文档、应用程序控制器及其相应路由的actions哈希中查找
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');
    }
  }
});

通常,如果未定义每条路由,则每条路由将有一个默认控制器。 在控制器A中,这行代码
this.send('makeItHappen')
将在数据表、文档、应用程序控制器及其相应路由的actions哈希中查找
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');
    }
  }
});

控制器A和控制器B之间的连接是什么?。我的意思是这是亲子路线吗?。如果没有连接,则可以插入控制器并调用函数direcltyThank@kumkanillam,路径是:
controllers/documents/dataset/controller-A
controllers/controller-B
我找不到A和B控制器之间的任何关系,我的意思是,当存在父子关系时,
send
将冒泡到父控制器,直到父应用程序在层次结构中路由。。因此,您可以插入并直接调用控制器B的
makeItHappen
函数。这可能是控制器A和控制器B之间的连接?。我的意思是这是亲子路线吗?。如果没有连接,则可以插入控制器并调用函数direcltyThank@kumkanillam,路径是:
controllers/documents/dataset/controller-A
controllers/controller-B
我找不到A和B控制器之间的任何关系,我的意思是,当存在父子关系时,
send
将冒泡到父控制器,直到父应用程序在层次结构中路由。。因此,您可以插入并直接调用controller-B的
makeItHappen
函数。这可能是您的答案。但是我想使用控制器A发送给控制器B的东西。这是我必须使用的技术吗,就像将控制器A注入控制器B一样?这种要求很奇怪,如果您只想单独使用函数,那么您可以将其编写为一个util文件,并在需要的地方导出和包含它。基本上,我只想从select下拉列表的onchange事件及其值(在Controller-a中)发送一个操作。然后在另一个控制器(控制器B)中捕捉到,仅此而已。但我不知道如何才能做到。发送将在控制器/路由层次结构中冒泡,即,您只能在以下控制器文件(应用程序、文档、数据表)或路由文件(应用程序、文档、数据表)中捕获它。但不是在其他控制器中。如果您有意调用其他控制器文件方法,则需要注入特定的控制器并调用所需的函数。酷!我现在明白了。谢谢你的帮助和教导。谢谢你的回答。但是我想使用控制器A发送给控制器B的东西。这是我必须使用的技术吗,就像将控制器A注入控制器B一样?这种要求很奇怪,如果您只想单独使用函数,那么您可以将其编写为一个util文件,并在需要的地方导出和包含它。基本上,我只想从select下拉列表的onchange事件及其值(在Controller-a中)发送一个操作。然后在另一个控制器(控制器B)中捕捉到,仅此而已。但我不知道如何才能做到。发送将在控制器/路由层次结构中冒泡,即,您只能在以下控制器文件(应用程序、文档、数据表)或路由文件(应用程序、文档、数据表)中捕获它。但不是在其他控制器中。如果您有意调用其他控制器文件方法,则需要注入特定的控制器并调用所需的函数。酷!我现在明白了。谢谢你的帮助和教导。