jQuery 破坏 Meteor 中自定义 Polymer 事件的“细节”

jQuery destroying `detail` of custom Polymer events in Meteor

我正在 Meteor 中定义一个 Polymer 组件,它执行自定义 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="answer">{{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"}

但是如您所见,事件详细信息丢失了(在 "outer" 事件中)。外部事件是 jQuery.event,原始事件是由 Polymer 触发的 CustomEvent

jQuery docs 声明:

“以下属性也被复制到事件对象中,尽管它们的某些值可能未定义,具体取决于事件:

...详细信息,..."

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

我发现了一个类似的问题:Javascript CustomEvent detail not getting passed

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

此修复在 jQuery 的 compat 分支中,应该会在 jQuery 3.0 中修复,所以我现在会回答我自己的问题。