Aurelia验证未使用去盎司点火

Aurelia验证未使用去盎司点火,aurelia,Aurelia,验证未使用debounce触发,我希望服务器请求等待一段时间,以便在查看时完成电子邮件的键入 this.validation = validation.on(this) .ensure('email').isNotEmpty().isEmail().withMessage("email is required") .passes(newValue => { return this.webApi.EmailExists(newValue)

验证未使用debounce触发,我希望服务器请求等待一段时间,以便在查看时完成电子邮件的键入

 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需要的时间内发生更改,则不执行任何操作。如果不执行,则触发事件。