如何添加手势监听器而不将其直接添加到模板或“听众”中?属性,所以我可以根据选项添加它们。
e.g。
Polymer({
is: 'my-element',
properties: {
enableDrag: Boolean
},
listeners: {
// DO NOT DEFINE HERE
// 'viewer.track': 'handleTrack'
},
ready: function() {
if(this.enableDrag) {
// attach listeners to an element here, something like
// this.$.viewer.addEventListener('track', this.boundHandleTrack);
}
}
});
我已尝试过addEventListener('track', this.boundHandleTrack)
和setAttribute('on-track', 'handleTrack')
但无法继续工作。
谢谢!
答案 0 :(得分:1)
您应该能够使用listen
方法强制添加手势。 Fwiw,最好观察enableDrag
,而不是依赖ready
时间配置的属性。
不幸的是目前没有unlisten
,因为(iirc)手势代码不支持在1.0删除侦听器(这很快就会出现[tm])。有boundHandleTrack
的诡计在那里,因为没有unlisten
。
如果它适用于您的用例,那么只需总是在目标节点上监听on-track
并且在处理程序中禁止操作(就像我必须在下面做的那样)更容易。
properties: {
enableDrag: {
type: Boolean,
observer: 'enableDragChanged'
},
boundHandleTrack: {
value: function() { return this.handleTrack.bind(this); }
}
},
enableDragChanged: function(drag) {
if (drag && this.boundHandleTrack) {
this.listen(this.$.viewer, 'track', 'boundHandleTrack');
this.boundHandleTrack = null;
}
},
handleTrack: function(e) {
if (!this.enableDrag) return;
// ... otherwise do stuff
}