Aurelia验证未使用去盎司点火
验证未使用debounce触发,我希望服务器请求等待一段时间,以便在查看时完成电子邮件的键入Aurelia验证未使用去盎司点火,aurelia,Aurelia,验证未使用debounce触发,我希望服务器请求等待一段时间,以便在查看时完成电子邮件的键入 this.validation = validation.on(this) .ensure('email').isNotEmpty().isEmail().withMessage("email is required") .passes(newValue => { return this.webApi.EmailExists(newValue)
this.validation = validation.on(this)
.ensure('email').isNotEmpty().isEmail().withMessage("email is required")
.passes(newValue => {
return this.webApi.EmailExists(newValue)
.then(res => {
return !res;
});
}).withMessage("This Email is already registered.")
我的看法是:
<div class="form-group fg-float fg-line">
<input type="text" value.bind="searchFields.emailId & debounce">
<label class="fg-label"></label>
</div>
这完全取决于您使用的aurelia验证版本。看起来您使用的是返工前的版本。我建议您尝试以下版本,例如0.6.8版:
this.validation = validation.on(this)
.ensure('email', config => {
config.useDebounceTimeout(150);
})
.isNotEmpty().isEmail().withMessage("email is required")
.passes(newValue => {
return this.webApi.EmailExists(newValue)
.then(res => {
if (res.exists) {
reject('This Email is already registered.');
} else {
accept();
}
});
});
然后,您可以从视图中删除去抖动绑定行为
但是,如果您决定更新到最新版本(1.0.0-beta.1.0.1),您可以尝试以下操作 您的视图模型应如下所示:
import {inject, NewInstance} from 'aurelia-framework';
import {ValidationController, ValidationRules, validateTrigger} from 'aurelia-validation';
@inject(ValidationController)
export class SignUp {
constructor(validationController) {
this.validationController = validationController;
this.validationController.validateTrigger = validateTrigger.change;
ValidationRules
.ensure('email').required().email()
.then()
.satisfies((newValue) => {
return new Promise((accept, reject) => {
this.webApi.EmailExists(newValue).then(data => {
if (data.exists) {
accept(false);
} else {
accept(true);
}
});
});
}).withMessage(`\${$displayName} is already taken.`)
.on(this);
}
}
您的视图将是:
<div class="form-group fg-float fg-line">
<input type="text" value.bind="searchFields.emailId & validate & debounce">
<label class="fg-label"></label>
</div>
这将在每次更改输入中的值时触发验证(因为validateTrigger.change。如果删除该行,将在模糊时触发验证(如果离开该字段).您可以尝试一些简单的方法,比如setTimeout,如果绑定到ValidStation的变量在setTimeout需要的时间内发生更改,则不执行任何操作。如果不执行,则触发事件。