gpt4 book ai didi

javascript - LitElement 从列表中删除项目

转载 作者:行者123 更新时间:2023-11-30 09:10:43 25 4
gpt4 key购买 nike

当页面首次加载时,下面代码生成的删除按钮按预期工作。但是,如果您更改其中一个 <textarea> 中的文本元素,删除按钮不再正常工作。我该如何解决这个问题?

import { LitElement, html } from 'lit-element';

class MyElement extends LitElement {
static get properties() {
return {
list: { type: Array },
};
}
constructor() {
super();
this.list = [
{ id: "1", text: "hello" },
{ id: "2", text: "hi" },
{ id: "3", text: "cool" },
];
}
render() {
return html`${this.list.map(item =>
html`<textarea>${item.text}</textarea><button id="${item.id}" @click="${this.delete}">X</button>`
)}`;
}
delete(event) {
const id = event.target.id;
this.list = this.list.filter(item => item.id !== id);
}
}
customElements.define("my-element", MyElement);

最佳答案

我不确定确切的原因,但我认为这与 lit-html 决定在呈现比之前呈现的项目更少的列表时删除哪些 DOM 元素的方式有关。解决方案是使用 repeat directive .它的第二个参数是一个函数,该函数帮助 lit-html 识别哪些 DOM 元素对应于数组中的哪些项目:

import { repeat } from 'lit-html/directives/repeat.js'

// ...
render(){
return html`
${repeat(this.list, item => item.id,
item => html`<textarea>${item.text}</textarea><button id="${item.id}" @click="${this.delete}">X</button><br>`
)}
`;
}

关于javascript - LitElement 从列表中删除项目,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59331129/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com