Polymer - 将事件绑定到动态创建的元素

时间:2016-04-20 15:29:32

标签: javascript events dynamic binding polymer

我正在尝试创建一个聚合物组件,它将进行ajax调用并根据响应填充列表,我还想在每个列表元素中添加一个click / tap事件,以便在我点击时执行某些操作列表项目。

我像这样创建列表:

  populateList: function(items) {
    if (items.length == 0) {
      return;
    }
    var menu = this.$$('.mp-Autocomplete-dropdown-menu');
    var node = null;

    for (var k = 0; k < items.length; k++) {
      node = document.createElement('li');
      node.setAttribute('class', 'style-scope mp-autocomplete');
      node.setAttribute('tabindex', '0');

      node.innerHTML = items[k];
      menu.appendChild(node);
      this.listen(this.$$('li'), 'click', '_itemTapHandler');

      .addEventListener('')
    }
  },

但是'listen'不起作用,我在聚合物文档中找不到任何可能对我有帮助的东西 - 没有超出组件并在完整文档上调用直接js,这不会很好。 .....有谁能帮助我?

谢谢, 科尔姆

1 个答案:

答案 0 :(得分:4)

this.$$('li')始终返回元素中的第一个<li>元素,这可能不是您想要的。

改为使用:

this.listen(node, 'click', '_itemTapHandler');

如果您想稍后将其删除

var node = ... /* get reference to node */

this.unlisten(node, 'click', '_itemTapHandler');

另见https://www.polymer-project.org/1.0/docs/devguide/events.html#imperative-listeners