结果是,在这种特殊情况下,我可以通过简单地将onchange事件移到表行来解决它,如下所示:
<tr each="{ item in opts.items }" onchange="{ onChange }">
<td each="{ name, key in opts.columns }">
<input type="text" name="{ key }" value="{ item[key] }">
</td>
<td>
<button onclick="{ remove }">Remove</button>
</td>
</tr>
然而,由于某些原因,我不明白,这样做的一个副作用是
e.item
是现在
e.item.item
... 意思是我的(完成)
onChange
事件变成:
this.onChange = function (e: RiotEvent): void {
const { item: { item }, target: { name, value } } = e;
const index = this.opts.items.indexOf(item);
tag.opts.items[index][name] = value;
};