根据变量添加Polymer手势侦听器

时间:2015-06-30 23:20:25

标签: javascript polymer polymer-1.0

如何添加手势监听器而不将其直接添加到模板或“听众”中?属性,所以我可以根据选项添加它们。

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')但无法继续工作。

谢谢!

1 个答案:

答案 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
}