Как вызвать функцию на каждом элементе повторения - PullRequest
0 голосов
/ 04 января 2019

Я пытаюсь вызвать функцию для каждого элемента внутри 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 на каждый элемент?

Ответы [ 2 ]

0 голосов
/ 06 января 2019

Вы можете добавить событие 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();
}
0 голосов
/ 04 января 2019

Вы можете перебирать узлы, такие как:

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)
}
...