【问题标题】:Stop click propagation from Ember action?停止来自 Ember 操作的点击传播?
【发布时间】:2014-04-09 10:33:21
【问题描述】:

我有这段代码,当单击图标编辑跨度时,它会触发一个打开模式的操作,但是,与此同时,单击会传播到它下面的视图(personView)。我希望该操作执行并停止传播。

我能想到的唯一解决方案是让图标编辑自己的视图并通过在方法 click 中返回 false 来停止点击传播。有没有其他方法可以做到这一点而无需另辟蹊径?

哈佛商学院:

{{#view Blocks.PersonView}}
  <span class="inline pull-right icon-edit" {{action 'modalOpen' 'modifyPersonPopup' 'modifyPerson' this}}></span>
  <p class="inline pull-left person-name">{{firstNameDelayed}}</p>
{{/view}}

【问题讨论】:

  • PersonView 中是否已经调用了单击事件挂钩,您是否正在处理 modalOpen 操作中的单击?
  • 人物视图中有一个点击事件挂钩
  • 一种选择是查看 PersonView 中的 event.target,如果目标是 .icon-edit,则使用 E​​m.ViewtargetActionSupport mixin 来调用操作 modalOpen。但这仍然有点骇人听闻。您可能需要使用 event.preventDefault();和 event.stopPropagation();也在一起。

标签: javascript view ember.js click


【解决方案1】:

您也可以将bubbles=false 参数添加到action 标记。请参阅API documentation 了解如何配置事件传播。

【讨论】:

  • 这是我最初选择的更好的答案。刚刚将其切换为可接受的答案!
  • 太棒了!这正是我想要的。顺便说一句,与 ember doc 相关的链接没有提及气泡上的任何内容。
  • 这很可能对 Ember 2.x 不再有效(您会通过上面的链接自动重定向到 2.x 指南部分),因为 Ember 1.x 文档仍然存在此项目。
  • 实际上这对我使用 Ember 2.5 有效。我只是在模板中动作定义的最后一个参数之后添加了 bubbles=false。
【解决方案2】:

尝试修改动作:

modalOpen: function {
    //code of your action
    return false;    
}

这在类似情况下对我有用

【讨论】:

  • Tnx, bubble=false 没有帮助,但这是肯定的。
  • 希望您尝试过bubbles=false,它的工作原理与return false; 在操作中的工作原理完全相同。
【解决方案3】:

实现此目的的辛烷值方法是使用来自 ember-event-helpers 插件的 stop-propagation 助手。

<span class="inline pull-right icon-edit" {{on "click" (stop-propagation (queue this.modalOpen this.modifyPersonPopup this.modifyPerson))}}></span>

【讨论】:

    猜你喜欢
    • 2021-03-25
    • 1970-01-01
    • 2023-03-23
    • 1970-01-01
    • 2015-09-06
    • 2021-06-15
    • 1970-01-01
    • 2019-03-08
    • 2013-04-24
    相关资源
    最近更新 更多