jQuery破坏Meteor中自定义聚合物事件的“细节”

jQuery destroying `detail` of custom Polymer events in Meteor

本文关键字:细节 事件 聚合物 破坏 Meteor 自定义 jQuery      更新时间:2023-09-26

我正在Meteor中定义一个聚合物组件,该组件执行自定义fire:

<polymer-element name="tm-card">
  <template>
    ... content ...
    <paper-button data-rating="good" on-tap="{{rated}}" flex raised> Good! </paper-button>
    <paper-button data-rating="easy" on-tap="{{rated}}" flex> Easy! </paper-button>
  </template>
  <script>
  Polymer({
    rated: function (event, detail, sender) {
      var rating = sender.dataset.rating;
      this.fire('rated', {rating: rating});
    }
  });
  </script>
</polymer-element>

这似乎工作得很好,我可以在Meteor:中捕捉到事件

<template name='reviewItem'>
  <tm-card>
    <p class="question">{{question}}</p>
    <p class="answerswer">{{answer}}</p>
  </tm-card>
</template>

Template.reviewItem.events
  'rated': (evt, tmpl) ->
    console.log 'item rated'
    console.log evt.detail # undefined
    console.log evt.originalEvent.detail # {rating: "easy"}

但正如您所看到的,事件细节丢失了(在"外部"事件中)。外部事件是一个jQuery.event,原始事件是Polymer触发的CustomEvent

jQuery文档指出:

"以下属性也被复制到事件对象,尽管根据事件的不同,它们的一些值可能未定义:

细节"

但是文档没有说明如何处理自定义事件类型。

  • 这是正常的jQuery行为吗
  • Meteor是否将事件包装在jQuery.event中以方便我

我发现了一个类似的问题:Javascript CustomEvent细节没有通过

然后我发现了以下提交:https://github.com/jquery/jquery/commit/a90ff8c8c79bfcc32afd340a12f016f20a31d8b6

这个修复程序在jQuery的compat分支中,应该从jQuery 3.0开始修复,所以我现在将回答我自己的问题。