gpt4 book ai didi

Aurelia if.bind 里面的 repeat.for 没有更新

转载 作者:行者123 更新时间:2023-12-03 14:18:39 27 4
gpt4 key购买 nike

我在元素的 Aurelia 模板中有一个奇怪的情况,其中 if.bind 位于 repeat.for 中,当它们的底层属性更改时不会显示/隐藏。使用以下代码,应显示编辑字段,并应在单击编辑按钮后立即隐藏编辑按钮。随后,保存和撤消按钮都应隐藏编辑字段并再次显示编辑按钮。

我的列表.ts:

import { computedFrom } from "aurelia-binding";

export class MyList
{
items: any[] = [{
"firstName": "Joe",
"lastName" : "Blow",
"id": 1
},
{
"firstName": "Jane",
"lastName" : "Doe",
"id": 2
}
]

editingItem: any = null
isEditing: boolean;

edit(item){
this.editingItem = item;
this.isEditing = true;
}

editFirst(item){
this.editingItem = this.items[0];
this.isEditing = true;
}

undo(){
// undo logic here
this.editingItem = null;
this.isEditing = false;
}

save(){
// Save logic here
this.editingItem = null;
this.isEditing = false;
}
}

我的列表.html:
<template>
<table>
<tbody>
<tr repeat.for="item of items">
<td if.bind="!isEditing">
<button click.delegate="edit(item)">Edit</button>
</td>
<td>${item.firstName}</td>
<td>${item.lastName}</td>
<td if.bind="isEditing && editingItem.id == item.id">
<button click.delegate="save()">Save</button>
<button click.delegate="undo()">Undo</button>
<input value.bind="editingItem.firstName" />
<input value.bind="editingItem.lastName" />
</td>
</tr>
</tbody>
</table>
</template>

单击编辑按钮什么也不做。有趣的是,如果我添加
${isEditing}

在repeat.for 之外的模板中的任何地方,代码都按预期工作。就好像渲染引擎不知道在重复循环内重新渲染元素一样。

这是一个错误吗?还是我在做傻事?

最佳答案

这很奇怪。我created a gist从您的代码中,正如您所说,它不起作用。控制台中也没有错误。

但是当我初始化 isEditing它开始工作

isEditing: boolean = false;

Updated gist

来自评论中的@Balázs : 通过不初始化 isEditing ,该属性实际上不存在——它可以用于自动完成/智能感知,但它实际上并不存在于对象上。您可以通过替换 console.log 来验证这一点。使用 console.log(this.editing); 调用编辑方法,你会看到它是 undefined .由于它是 undefined , Aurelia 不能 subscribe到它(因为它好像甚至不存在 - 不存在 getter/setter),因此无法知道它何时(如果有的话)出现。但是,即使将其明确设置为 undefined与此不同,因为这确实创建了属性,其值恰好设置为 undefined .

另请注意:

由于您正在分配 editingItem直接与 item这里:
edit(item){
this.editingItem = item;
this.isEditing = true;
}

无论您更改什么 editingItem会影响 item以及。所以即使你 undo ,更改将持续到 item .所以你应该做一个 clone在分配给 editingItem 之前.

关于Aurelia if.bind 里面的 repeat.for 没有更新,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46331928/

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