我看到THIS有关我正在验证的表单是否已更改的问题。
然而,它与Aurelia验证无关,我想验证表单在单击保存按钮时是否有任何更改。我不想在服务器上这样做。
我所做的是保存我最初提取的值,以便进行比较。
fetch("/api/Client/editClient/" + parms.id, {
method: "GET",
headers
})
.then(response => response.json())
.then(data => {
this.client.deserialize(data);
this.originalClient === this.client;
})
原始客户端是未修改的对象。
我已经创建了一个自定义验证功能,但它没有按预期工作。
我以为我可以使用当前值,然后将其与原始值进行比较。
ValidationRules.customRule(
'changesExist',
(value, obj, fetchedEntity) =>
fetchedEntity != value,
'No changes detected'
);
当我尝试使用它时,我发现它有误:
// Validation Rules.
ValidationRules
.ensure(a: ClientDetails) => a).satisfiesRule('changesExist', this.originalClient);
我不确定如何使这项工作。我想要的是一个验证,它将orginalClient对象与要发送回服务器的对象进行比较。这样我可以检查是否有理由将其发送回来将其保存到数据库......
答案 0 :(得分:1)
它相当蛮力,但这可能会做你想要的:
JSON.stringify(fetchedEntity) !== JSON.stringify(value)
答案 1 :(得分:0)
app-contacts示例应用使用areEqual
函数执行此操作。看看回购,您可以看到它是如何使用的,以及如何根据您的目的进行调整。
function areEqual(obj1, obj2) {
return Object.keys(obj1).every((key) => obj2.hasOwnProperty(key) && (obj1[key] === obj2[key]));
};