Как вызвать функцию на каждом элементе повторения
Я пытаюсь вызвать функцию для каждого элемента внутри 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 ответа
Решение
Вы можете перебирать узлы, такие как:
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)
}
Вы можете добавить 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();
}