Aurelia验证嵌套对象

时间:2017-04-08 17:35:05

标签: aurelia aurelia-validation

我试图验证Aurelia ViewModel的对象属性。

视图模型

@autoinject
class AddUserForm {
   user: User;
   controller: ValidationController;

    constructor(controllerFactory: ValidationControllerFactory) {
        this.controller = controllerFactory.createForCurrentScope();
    }

    validate() {
        this.controller.validate.then(res => {
            console.log(res.valid);
        })
    }
}

ValidationRules
    .ensure((u: User) => u.id).displayName('User').required()
    .on(AddUserForm)

ViewModel - >图

<template>
    <form click.trigger="validate()">
        <input type="text" value.bind="user.id & validate" />
    </form>
</template>

用户

class User {
    id: string
}

我遇到的问题是验证器没有拿起嵌套的用户对象。我错过了一些让这个工作的东西?我读了docs,看起来这应该有效。我正在使用该插件的^1.0.0版本。

2 个答案:

答案 0 :(得分:1)

问题在于您的ValidationRules:

ValidationRules
.ensure((u: User) => u.id).displayName('User').required()
.on(AddUserForm)

需要

ValidationRules
.ensure((u: User) => u.id).displayName('User').required()
.on(User)

然后要让控制器运行此规则,您需要包含&#34;&amp;验证&#34;在你的value.bind 中的某个地方,如下所示:

<input value.bind="user.id & validate" />

或在调用controller.validate()之前,将整个对象添加到控制器,如下所示:

this.controller.addObject(this.user);

我一直使用.addObject ,因为它会导致验证在标记中包含的属性上运行,我觉得我更喜欢它。

答案 1 :(得分:0)

我尝试时导致错误:

validate() {
    this.controller.validate(res => {
        console.log(res.valid);
    })
}

.validate()需要一个ValidateInstruction,在你的例子中你给予(res:any)=&gt;无效。我会尝试改为:

this.controller.validate().then(res => {
    console.log(res.valid);
});

离开.validate()undefined将导致它验证所有对象和绑定,并且.then()将在验证完成后执行。 当我在我的测试项目中尝试时,这对我有用。

如果我误解了您的问题,但这并没有解决问题,您也可以尝试将User个对象ID分配给AddUserForm中的属性,如下所示:

public userId = this.user.id;

更改您的ValidationRules并相应地查看:

<强>视图模型

ValidationRules
    .ensure((u: AddUserForm) => u.userId)
    .displayName("User")
    .required()
    .on(this);

查看

<template>
    <form click.delegate="validate()">
        <input type="text" value.bind="userId & validate" />
    </form>
</template>