【问题标题】:Event Delegation in PolymerPolymer 中的事件委托
【发布时间】:2014-07-23 07:36:41
【问题描述】:

有没有办法将外部主体元素的事件委托添加到阴影元素中?

例如,我希望每当有人用class="special"点击anchor时触发一个特殊功能。

通常(在 jquery 中):

$('body').on('click', 'a.special', myFunction);

但是,使用 shadow DOM 似乎是不可能的,至少在我尝试过的所有方法中都是这样。我是否真的需要将这些处理程序添加到 a.special 的每个实例中,因为它们出现在某个模板中?

【问题讨论】:

    标签: javascript polymer event-delegation


    【解决方案1】:

    在您的示例中,您仍然可以将事件委托与自定义元素一起使用:

    $('body').on('click', 'my-element', myFunction);
    

    不同之处在于,事件看起来像是来自 my-element 而不是元素 shadow dom 内部的 a.special。那是因为 event model 会重定向以隐藏 shadow dom 的实现细节。

    您还可以在元素内设置侦听器,当点击 a.special 时触发事件:http://www.polymer-project.org/articles/communication.html#utilizing-event-delegation

    要了解更复杂的内容,请查看 Polymer 网站上的 Communication & Message Passing。特别是,<core-signals> 可用于类似 pubsub 的模式。

    【讨论】:

    • 请注意,event.path 可以为您提供有关不加掩饰的目标的更多信息。这是一个问题解决器,但它破坏了封装,因此请谨慎使用。
    • 感谢您的信息。所以看起来我真的不能使用影子 dom 实现全局事件委托模式?我看到了你给出的例子,并且已经阅读了所有网站的文档,但似乎(尤其是使用 嵌套模板)我必须遵循聚合物方法并改变我的方式思考......@ScottMiles:你能解释一下路径吗?我在事件对象中看到它,但 1)在 path 属性上找不到任何文档,2)它只是一个空节点列表(对我来说)
    猜你喜欢
    • 2016-11-08
    • 1970-01-01
    • 1970-01-01
    • 2013-01-18
    • 1970-01-01
    • 1970-01-01
    • 2012-02-26
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多