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 声明:
“以下属性也被复制到事件对象中,尽管它们的某些值可能未定义,具体取决于事件:
...详细信息,..."
但是文档没有说明如何处理自定义事件类型。
- 这是正常的 jQuery 行为吗?
- Meteor 是否为了我的方便将事件包装在
jQuery.event
中?
我发现了一个类似的问题:Javascript CustomEvent detail not getting passed
然后我发现了以下提交:https://github.com/jquery/jquery/commit/a90ff8c8c79bfcc32afd340a12f016f20a31d8b6
此修复在 jQuery 的 compat
分支中,应该会在 jQuery 3.0 中修复,所以我现在会回答我自己的问题。
我正在 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 声明:
“以下属性也被复制到事件对象中,尽管它们的某些值可能未定义,具体取决于事件:
...详细信息,..."
但是文档没有说明如何处理自定义事件类型。
- 这是正常的 jQuery 行为吗?
- Meteor 是否为了我的方便将事件包装在
jQuery.event
中?
我发现了一个类似的问题:Javascript CustomEvent detail not getting passed
然后我发现了以下提交:https://github.com/jquery/jquery/commit/a90ff8c8c79bfcc32afd340a12f016f20a31d8b6
此修复在 jQuery 的 compat
分支中,应该会在 jQuery 3.0 中修复,所以我现在会回答我自己的问题。