避免事件捕获

时间:2015-01-14 16:58:10

标签: javascript inheritance polymer web-component core-elements

我试图在聚合物自定义元素中避免使用event capturing,因此我只想在元素中包含的['items']激发时才触发事件。

我有两个不同的自定义元素。两个自定义元素都在扩展core-selector。  一个是包装另一个。

所以我有类似的东西:

<my-parent-element>
    <parentItem>I'm a parent
       <my-child-element>
           <childItem>I'm a child</childItem>
           <childItem>I'm a child</childItem>
           <childItem>I'm a child</childItem>
       </my-child-element>
    </parentItem>
    <parentItem>I'm a parent</parentItem>
    <parentItem>I'm a parent</parentItem>

</my-parent-element>

自定义元素定义

  • <my-parent-element>拥有自己的核心选定事件处理程序。
  • <my-child-element>没有脚本也没有事件处理程序。

我的目标:

  • 仅当选择了来自<my-parent-element>的项目时才会显示该事件 触发。
  • 我想保持组件的独立性,所以我不想修改孩子。

场合

基于this answer我正在停止检查所收到项目的方法,但我认为这不是一个合适的解决方案......

onCoreSelect: function (event, detail, sender) {
                if (!detail.item.classList.contains('child')) {
                   return;   //Dislike!
                }
);

...因为我甚至不想触发该方法。

您可以在this Plunker中重现它。 onCoreSelect写入详细信息,但只选择父项应该这样做。如您所见,当点击任何子项时,它会触发事件。

THX!

1 个答案:

答案 0 :(得分:0)

仅在使用声明性事件映射完成“由项目激发”时调用方法。

以下是文档和示例:

https://www.polymer-project.org/docs/polymer/polymer.html#declarative-event-mapping