Polymer 如何获取“在纸上单击”按钮时分配给的值?

Polymer 如何获取“在纸上单击”按钮时分配给的值?,polymer,Polymer,我需要这个自定义元素,可以装饰事件处理程序,例如,当你点击一个按钮时显示一个确认对话框。具体地说,我需要知道事件处理程序的名称,以便能够使用this删除它。取消对的侦听,并为其定义一个包装器。目前没有用于此的公共API,但您可以使用以下代码,这些代码深入到Polymer内部,以获取绑定的事件侦听器由于该解决方案使用Polymer的私有API,因此不能保证在将来的版本中工作。 在Polymer 1.5.0中,添加到内部属性\uu boundListeners,该属性是事件名称到方法名称的映射。此地

我需要这个自定义元素,可以装饰事件处理程序,例如,当你点击一个按钮时显示一个确认对话框。具体地说,我需要知道事件处理程序的名称,以便能够使用
this删除它。取消对
的侦听,并为其定义一个包装器。

目前没有用于此的公共API,但您可以使用以下代码,这些代码深入到Polymer内部,以获取绑定的事件侦听器由于该解决方案使用Polymer的私有API,因此不能保证在将来的版本中工作。

在Polymer 1.5.0中,添加到内部属性
\uu boundListeners
,该属性是事件名称到方法名称的映射。此地图中按键的格式为:“
”(例如,
“点击:\u handleTap”
)。因此,您可以通过搜索
\uu boundListeners
,找到侦听特定事件的所有方法:

function getListenerMethods(target, eventName) {
  var boundListeners = this.__boundListeners || {};
  var listeners = boundListeners.get(target) || {};
  var methodNames = Object.keys(listeners).filter(function(key) {
    return key.split(':')[0] === eventName;
  }).map(function(key) {
    return key.split(':')[1];
  });
  return methodNames;
},
在下面的演示中,我使用了一个mixin on
Polymer.Base
来添加
unlistenAll()
,它允许您使用Polymer对象的函数,如下所示:

this.unlistenAll(this.$.myButton, 'click');
下面是演示:


HTMLImports.whenReady(函数(){
//混合
聚合物。基础。添加功能({
/**
*获取侦听元素事件的所有方法的名称。
*
*@param{Element}要从中检索方法名的目标节点元素。
*@param{String}eventName要查找的事件的名称。
*@this上返回处理程序方法的{Array}名称`
*/
getListenerMethods:函数(目标、事件名称){
var boundListeners=这个;
var listeners=boundListeners.get(target)|{};
var methodNames=Object.keys(监听器).filter(函数(键){
return key.split(':')[0]==eventName;
}).map(功能(键){
返回键.split(“:”)[1];
});
返回方法名;
},
/**
*从给定元素中删除特定事件的所有侦听器。
*
*@param{Element}要从中删除事件侦听器的目标元素。
*@param{String}eventName要停止侦听的事件的名称。
*/
unlistenAll:函数(目标、事件名称){
var self=这个;
this.getListenerMethods(target,eventName).forEach(function(methodName){
log('unlisting'+eventName+':'+methodName+'“from:',target));
self.unlisten(target、eventName、methodName);
});
}
});
});
点击
HTMLImports.whenReady(函数(){
聚合物({
是‘x-foo’,
_单击:函数(){
console.log('clicked');
},
就绪:函数(){
this.unlistenAll(this.$.btn,'单击');
}
});
});

目前没有用于此目的的公共API,但您可以使用以下代码,这些代码深入到聚合内部,以获取绑定的事件侦听器由于该解决方案使用Polymer的私有API,因此不能保证在将来的版本中工作。

在Polymer 1.5.0中,添加到内部属性
\uu boundListeners
,该属性是事件名称到方法名称的映射。此地图中按键的格式为:“
”(例如,
“点击:\u handleTap”
)。因此,您可以通过搜索
\uu boundListeners
,找到侦听特定事件的所有方法:

function getListenerMethods(target, eventName) {
  var boundListeners = this.__boundListeners || {};
  var listeners = boundListeners.get(target) || {};
  var methodNames = Object.keys(listeners).filter(function(key) {
    return key.split(':')[0] === eventName;
  }).map(function(key) {
    return key.split(':')[1];
  });
  return methodNames;
},
在下面的演示中,我使用了一个mixin on
Polymer.Base
来添加
unlistenAll()
,它允许您使用Polymer对象的函数,如下所示:

this.unlistenAll(this.$.myButton, 'click');
下面是演示:


HTMLImports.whenReady(函数(){
//混合
聚合物。基础。添加功能({
/**
*获取侦听元素事件的所有方法的名称。
*
*@param{Element}要从中检索方法名的目标节点元素。
*@param{String}eventName要查找的事件的名称。
*@this上返回处理程序方法的{Array}名称`
*/
getListenerMethods:函数(目标、事件名称){
var boundListeners=这个;
var listeners=boundListeners.get(target)|{};
var methodNames=Object.keys(监听器).filter(函数(键){
return key.split(':')[0]==eventName;
}).map(功能(键){
返回键.split(“:”)[1];
});
返回方法名;
},
/**
*从给定元素中删除特定事件的所有侦听器。
*
*@param{Element}要从中删除事件侦听器的目标元素。
*@param{String}eventName要停止侦听的事件的名称。
*/
unlistenAll:函数(目标、事件名称){
var self=这个;
this.getListenerMethods(target,eventName).forEach(function(methodName){
log('unlisting'+eventName+':'+methodName+'“from:',target));
self.unlisten(target、eventName、methodName);
});
}
});
});
点击
HTMLImports.whenReady(函数(){
聚合物({
是‘x-foo’,
_单击:函数(){
console.log('clicked');
},
就绪:函数(){
this.unlistenAll(this.$.btn,'单击');
}
});
});