我想在@ensure中集中验证逻辑,但我不知道该怎么做。 这是从文档的例子:集中Aurelia验证逻辑
import {Validation} from 'aurelia-validation';
import {ensure} from 'aurelia-validation';
export class Person {
static inject() { return [Validation];}
//I want to inject validation logic here instead of using function(it){...}
@ensure(function(it){ it.isNotEmpty().hasLengthBetween(3,10) })
firstName = 'John';
constructor(validation) {
this.validation = validation.on(this);
}
}
,我会改变上面的代码如下喜欢:
import {Validation} from 'aurelia-validation';
import {ensure} from 'aurelia-validation';
import {UserValidation} from 'user/userValidation'; //custom validation logic here
export class Person {
static inject() { return [Validation];}
//can I do something like this instead of using function(it){...}?
@ensure(UserValidation.firstName)
firstName = 'John';
constructor(validation) {
this.validation = validation.on(this);
}
}
如果我们需要只收集第一页的名字,然后我们不必这样做毕竟,由于我们可能必须让用户在多个不同的页面上输入他们的名字,我们希望将验证逻辑集中在某处,以便我们不必复制&将它粘贴到任何地方。我们不想创建“名字组件”,因为UI在每个页面上都会有所不同,所以我们只是想重用验证逻辑。
更新: 我在Aurelia讨论中问过这个问题,并被要求尝试以下操作。
//userValidation.js
export function firstName(it){ it.isNotEmpty().hasLengthBetween(3,10)};
import {Validation} from 'aurelia-validation';
import {ensure} from 'aurelia-validation';
import * as userValidation from 'user/userValidation';
export class Person {
static inject() { return [Validation];}
@ensure(userValidation.firstName)
firstName = 'John';
constructor(validation) {
this.validation = validation.on(this);
}
}
但我收到此错误:未处理的承诺拒绝错误:错误实例化人。任何想法如何我可以解决这个问题?
我不知道为什么注射也没有创造新的验证 - 但你可以尝试: 'code' 构造函数(){ this.validation =新的验证(); this.validation.on(this); } '代码' – Steve
@Steve,其实上面的代码工作,但我不得不删除我的测试代码,不在上面的代码示例中的一行。对困惑感到抱歉。我发布了下面的答案。 –