聚合物1.0中的委托处理程序
Handlers delegation in polymer 1.0
UPDATE:响应和错误事件不再是气泡。https://github.com/PolymerElements/iron-ajax/releases/tag/v1.0.5真遗憾。
原始问题:
我想创建一个基于iron-ajax的自定义ajax组件,添加几个自定义的头和处理程序。虽然还没有实现自定义元素继承,但我只是将iron ajax添加到了我的ajax中,并将所有api委托给iron ajax,这在generateRequest中运行良好。
但当涉及到处理程序方法时,我注意到它在没有任何委托的情况下工作。在我的ajax elt中没有定义响应处理程序,但handleResponse仍然被调用。
据我所知,之所以会发生这种情况,是因为Polymer.Base_addFeature_createEventHandler(Polymer.html:345)使用顶级elt的"this"作为处理程序方法定义的"host"。
所以问题是:是bug还是特性?
示例代码:
<link rel="import" href="https://raw.githubusercontent.com/Polymer/polymer/master/polymer.html">
<link rel="import" href="https://raw.githubusercontent.com/PolymerElements/iron-ajax/master/iron-ajax.html">
<dom-module id="my-ajax">
<template>
<iron-ajax
id="ironAjax"
url="http://echo.jsontest.com/key/value/otherkey/othervalue"
handle-as="json"
debounce-duration="300"
>
</iron-ajax>
</template>
<script>
Polymer({
is: "my-ajax",
generateRequest: function(){
this.$.ironAjax.generateRequest();
}
});
</script>
</dom-module>
<dom-module id="my-elt">
<template>
<button on-click="buttonClick">Button</button>
<my-ajax
id="myAjax"
on-response="handleResponse">
</my-ajax>
</template>
<script>
Polymer({
is: "my-elt",
buttonClick: function(){
this.$.myAjax.generateRequest();
},
handleResponse: function(event) {
alert('got response');
}
});
</script>
</dom-module>
<my-elt></my-elt>
大多数事件都是冒泡的,所以您只是通过放置在my-ajax
实例上的处理程序看到response
事件从my-ajax
冒泡到my-elt
作用域。这与click
事件从较低范围冒泡到较高范围的情况相同。
所以答案是:"特性"(网络平台,比聚合物本身更重要)。
相关文章:
- keyup事件处理程序更改焦点不适用于快速键入
- 提示使用服务器端事件处理程序激活JavaScript
- 将事件处理程序绑定到任何可能的事件
- 正在将事件处理程序添加到不存在的类
- 在AJAX回调和呈现PIXIJS之间处理程序流时遇到了问题
- Adobe Edge:动画完成时添加onComplete处理程序
- 是否可以从输入处理程序中确定输入的类型
- 在循环中附加事件处理程序时出现浏览器性能问题
- 在同一个javascript事件处理程序中调用不同的函数
- 有没有一种方法可以让内联事件处理程序在元素创建后立即执行
- 检查事件处理程序参数
- 实现延迟的jquery更改事件处理程序
- 平均值.on(事件[,选择器][,数据],处理程序)
- getSript在同一对象上多次添加处理程序
- 如何使用Node.js在JavaScript模块文件之间使用事件处理程序
- 如何让React JS点击处理程序在执行时更新DOM
- 如何使jQuery的“bind”或“on”事件处理程序幂等
- Backbone listenTo不将jquery函数作为处理程序进行激发
- 带有参数的Javascript事件处理程序
- Jquery事件处理程序仅适用于匿名函数