如何使用聚合中的Javascript设置的“点击”行为

如何使用聚合中的Javascript设置的“点击”行为,javascript,polymer,appendchild,Javascript,Polymer,Appendchild,我正在尝试使用Poylmer 2.x中的一个函数动态地向tho DOM添加一个纸按钮 我希望这个新按钮在点击时调用另一个函数 appendNodeToDom() { let prop = this.result[i]['someProperty']; let node = document.createElement("paper-button"); let button = document.createTextNode(prop); button.ontap = this.

我正在尝试使用Poylmer 2.x中的一个函数动态地向tho DOM添加一个纸按钮

我希望这个新按钮在点击时调用另一个函数

appendNodeToDom() {
  let prop = this.result[i]['someProperty'];
  let node = document.createElement("paper-button");
  let button = document.createTextNode(prop);

  button.ontap = this.go(); // what is the proper syntax for this?

  node.appendChild(button);
  this.shadowRoot.getElementById('buttons').appendChild(node);
}

go() {
  console.log('go');
}
还尝试:

button.addEventListener("click", this.go());
button.addEventListener("tap", this.go());

如何使用Polymer 2.x中的Javascript设置点击行为?

问题是您正在调用paper按钮内的文本节点,并在该节点上设置事件侦听器,该节点作为文本节点,除了一些事件之外不会触发事件

另外,您正在将this.go作为回调传递给addEventListener。这意味着执行This.go,然后返回值作为回调传递,在本例中未定义,因为在console.log之后,您不会返回任何内容。您应该传递函数的标识符,而不调用它:

addEventListener('tap', this.go);
总而言之:

appendNodeToDom() {
  let prop = this.result[i]['someProperty'];
  let button = document.createElement('paper-button');
  let text = document.createTextNode(prop);

  button.appendChild(text);
  button.addEventListener('tap', this.go); // Add the listener to button
  this.shadowRoot.getElementById('buttons').appendChild(node);
}

go() {
  console.log('go');
}

请注意:请记住,Polymer有很多工具可以避免直接执行DOM操作。如果您只需要在列表中添加一个按钮,您可以考虑一个解决方案,其中DOM重复呈现按钮,并且对基础数组属性进行更改。是的,这是一种特殊情况,其中DOM根据此结果的长度进行不同的渲染。@Matthew如果您认为此答案有帮助,请接受它。