【问题标题】:Ember: Bubble action from component to application controllerEmber:从组件到应用程序控制器的气泡操作
【发布时间】:2015-08-06 10:30:50
【问题描述】:

我在 ember 中有一个组件,它需要向应用程序控制器发送一个操作(带有一个参数)。无论此组件在何处呈现,它都需要在应用程序控制器上调用完全相同的操作。

应用程序控制器

export default Ember.Controller.extend({
  actions: {
    addAlert: function(message) {
      this.set('message', message);
    },
    removeAlert: function(message) {
      this.set('message', message);
    }
  }
});

我该如何处理?从头到尾。

【问题讨论】:

  • 您是否查看了此处的指南:guides.emberjs.com/v1.10.0/components/…?
  • 有什么原因你没有在申请路线上抓住它?
  • @Kitler 我正在修改控制器上的属性,所以我希望动作在那里
  • 动作不会通过控制器冒泡,它们会通过路由冒泡,您可以在应用程序路由上捕获它并从那里设置控制器属性。
  • @Kitler 的回答是正确的。您不会冒泡到应用程序控制器,但会冒泡到应用程序路由。但是,如果您需要在使用组件的任何地方触发相同的操作,那么为什么不在组件本身中包含操作呢?

标签: javascript ember.js ember-cli


【解决方案1】:

动作不会通过控制器冒泡,当触发动作时,它将通过当前路由的控制器,如果没有任何处理它,它会冒泡到当前路由一直到顶级路由(应用程序) .

如果该操作必须在控制器上设置属性,您可以直接从应用程序路由设置它(尽管不推荐)。

// routes/application.js
actions {
  addAlert(message) {
      this.controller.set('message', message);
    },
    removeAlert(message) {
      this.controller.set('message', message);
    }
}

更多信息请阅读action bubbling。

【讨论】:

  • 这正是我的问题,谢谢。为什么动作会在路由中冒泡,而不是控制器?有什么具体原因吗?
  • 老实说,我从来没有问过这个问题 x.x 我会在找到原因后更新你
  • 拜托了!我很好奇
  • 我无法将任何东西冒泡到 Route 级别。做了所有的指南。你们用的是 Ember 1.13 吗?
  • @BrenoInojosa 发布一个新问题,详细说明您的操作方式
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2017-10-24
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2023-04-01
相关资源
最近更新 更多