Aurelia - 自定义验证以检查表单是否有更改

时间:2018-01-26 11:21:17

标签: aurelia aurelia-validation

我看到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对象与要发送回服务器的对象进行比较。这样我可以检查是否有理由将其发送回来将其保存到数据库......

2 个答案:

答案 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]));
};