0

我试图在dom-repeat模板内的每个元素上调用一个函数。

<dom-repeat items="[[cart]]" as="entry">
  <template>
    <shop-cart-item id="item"></shop-cart-item>
  </template>
</dom-repeat>

...

checkStatus() {
  this.$.item.doSomething();
}

如何调用doSomething每个元素?

4

2 回答 2

-1

您可以遍历节点,例如:

checkStatus() {
  const forEach = f => x => Array.prototype.forEach.call(x, f);

  forEach((item) => {
    if(item.id == 'cartItem') {
      console.log(item);
      item.doSomething(); // call function on item
    }
  })(this.$.cartItems.childNodes)
}
于 2019-01-03T22:58:22.720 回答
-1

on-tap您可以在循环中添加事件。为了观察您单击了哪个项目,请查看model属性:

<dom-repeat items="[[cart]]" as="entry">
  <template>
     <!-- need to give dynamic id for each item in dome-repeat -->
    <shop-cart-item id="[[index]]" on-tap = 'checkStatus'></shop-cart-item>

  </template>
</dom-repeat>

...

checkStatus(status) {
  console.log(status.model)  // you can get index number or entry's properties.
  this.$.item.doSomething();
}

编辑:

因此,根据@Matthew 的评论,如果需要在元素函数之一中调用函数,则dom-repeat首先给出id name如上所述的动态:

checkStatus(status) {
  this.shadowRoot.querySelector('#'+ status.model.index).doSomething();
}
于 2019-01-06T08:46:34.833 回答