首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在Ember 2.x中停止鼓泡/繁殖

在Ember 2.x中停止鼓泡/繁殖
EN

Stack Overflow用户
提问于 2018-02-09 19:50:17
回答 1查看 853关注 0票数 0

在Ember 2.18中,是否有适当的方法来停止这种情况下的冒泡?我找不到一个与文档相匹配的例子,但在网上找到了另外两个例子。这两种方法都能工作,但其中一种看起来可能被废弃了,因为我在Ember文档的最新版本中找不到对它的引用。

场景:我有一个容器。我想点击它来展开/打开它。在容器里,我有一个按钮。我想点击这个按钮来关闭它。通常的问题是,单击要关闭的按钮也会触发父容器的单击事件来打开。

要解决这个问题,我相信当单击按钮时,我需要防止冒泡/传播。

我发现的两个解决办法如下:

解决方案1:

event.stopPropagation();

构成部分JS:

代码语言:javascript
复制
import Component from '@ember/component';

export default Component.extend({
  tagName: "section",
  classNames: ["Container"],
  classNameBindings: ['isOpen:Container--open'],
  isOpen: false,

  click() {
    if (!this.get('isOpen')) {
      this.send('openContainer');
    }
  },

  actions: {
    openContainer() {
      this.toggleProperty('isOpen');
      // JS removed for demo
    },

    closeContainer(event) {
      this.toggleProperty('isOpen');
      // JS removed for demo
      event.stopPropagation();
    }
  }
});

构成部分HBS:

代码语言:javascript
复制
<button onclick={{action 'closeContainer'}}>Close</button>

解决方案2:

bubbles=false

构成部分JS:

代码语言:javascript
复制
import Component from '@ember/component';

export default Component.extend({
  tagName: "section",
  classNames: ["Container"],
  classNameBindings: ['isOpen:Container--open'],
  isOpen: false,

  click() {
    if (!this.get('isOpen')) {
      this.send('openContainer');
    }
  },

  actions: {
    openContainer() {
      this.toggleProperty('isOpen');
      // JS removed for demo
    },

    closeContainer() {
      this.toggleProperty('isOpen');
      // JS removed for demo
    }
  }
});

构成部分HBS:

代码语言:javascript
复制
<button {{action 'closeContainer' bubbles=false}}>Close</button>

感谢所有反馈意见。谢谢!

EN

回答 1

Stack Overflow用户

发布于 2018-02-10 08:49:12

你走在正确的轨道上。

下面是当前用于处理事件冒泡的Ember 2.18方法。

代码语言:javascript
复制
// No bubbling
import Component from '@ember/component';

export default Component.extend({
  doubleClick() {
    alert('DoubleClickableComponent was clicked!');
  }
});

// Allow bubbling
import Component from '@ember/component';
import Ember from 'ember';

export default Component.extend({
  doubleClick() {
    Ember.Logger.info('DoubleClickableComponent was clicked!');
    return true;
  }
});

Ember指南处理事件

使用bubbles=false的第二个解决方案在Ember2.18中仍然可以接受。参见事件传播。

模板帮助方法动作

再次,我很抱歉误解了你的问题。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/48713114

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档