javascript - Hur får man Aurelia-valideringar att fungera?


Jag började med http://aurelia.io/hub.html#/doc/article/aurelia/validation/latest/validation-basics/1

Försökte sedan http://blog.durandal.io/2016/06/14/new-validation-alpha-is-here/

Dock sker inte validering vid blur som förväntat. Även om jag kallar validate på kontrollern, sätts inte felen.

login.ts

import {inject, NewInstance} from 'aurelia-dependency-injection';
import {ValidationController} from 'aurelia-validation';
import {ValidationRules} from 'aurelia-validatejs'

@inject(NewInstance.of(ValidationController))
export class Login {
    email:string;
    password:string;
    controller = null;

    constructor(controller){
        this.controller = controller;
    }

    submit = () => {
        this.controller.validate().then((res) => console.log(res)).catch((e) =>console.log(e));
    };
}

ValidationRules
    .ensure('email').required()
    .on(Login);

login.html

<form submit.delegate="submit()">
                <div class="form-group">
                    <label for="email" class="control-label required">Email</label>
                    <input class="form-control" value.bind="email & validate" type="email" id="email">
                </div>
                <div class="form-group">
                    <label for="password" class="control-label required">Password</label>
                    <input class="form-control" value.bind="password & validate" type="password"
                           id="password">
                </div>
                <div class="form-group">
                    <input id="remember_me" name="remember_me" type="checkbox" value="1">
                    <label for="remember_me" class="control-label">Remember me</label>
                </div>
                <div class="form-group">
                    <button class="btn btn-primary btn-block" type="submit">Login</button>
                </div>
            </form>

aurelia.json

      {
        "name": "aurelia-validation",
        "path": "../node_modules/aurelia-validation/dist/amd",
        "main": "aurelia-validation"
      },
      {
        "name": "validate.js",
        "path": "../node_modules/validate.js",
        "main": "validate"
      },
      {
        "name": "aurelia-validatejs",
        "path": "../node_modules/aurelia-validatejs/dist/amd",
        "main": "aurelia-validatejs"
      },

main.ts

aurelia.use
    .standardConfiguration()
    .plugin('aurelia-validation')
    .plugin('aurelia-validatejs')
    .feature('resources');

Svar #1

Från och med version 0.12 beroende aurelia-validation inte längre på validate.js. Det verkar som att du fortfarande använder ValidationRules från ett borttaget beroende. Byt helt enkelt

import {ValidationRules} from 'aurelia-validatejs'

till

import {ValidationRules} from 'aurelia-validation'

Förresten: Du kan helt ta bort aurelia-validatejs och validatejs från dina projektberoenden.

Svar #2

Du behöver skapa valideringsreglerna inuti din klass, förmodligen i attached-metoden, och du vill skicka this istället för Login. Det bör se ut så här:

attached(){
   ValidationRules
    .ensure('email').required()
    .on(this);
} 

Relaterade artiklar