2017-01-12 8 views
0

Я пытаюсь сопоставить одну проверку aurelia с кучей свойств в форме. Например. каждое поле с именем свойства ssid в массиве объектов, которые сопоставляются строкам в таблице. Документы валидации говорят, что в предложениях обеспечения может быть property expression, который звучит так, как мне нужно. Я использую проверки отaurelia validation свойство выражение help

{ValidationRules, ValidationController} from 'aurelia-validation';

Я получил подтверждение работает для одного свойства, используя

ValidationRules.ensure('apPwd').displayName('XY AP Password').maxLength(32).minLength(8).on(this);

где apPwd это выражение свойства.

Но я не могу найти никаких спецификаций для выражений свойств. Большинство примеров в документах aurelia просто показывают одно имя свойства. Самое сложное, что я видел, это вещи, соединенные вместе с | или & (что бы это ни было).

Может ли кто-нибудь указать мне спецификацию или помочь с моей конкретной проблемой? Или, может быть, я должен просто сорвать этот пакет и свернуть собственный код?

ответ

0

Я думаю, что это может помочь вам:

Это validate.ts

import { autoinject } from 'aurelia-framework'; 
import { ValidationRules, ValidationController } from 'aurelia-validation'; 

@autoinject 
export class Validate { 
    numberField: number; 

    controller: any; 

    constructor (
     private validationController: ValidationController 
    ) { 
     this.controller = validationController; 

     ValidationRules.customRule(
      'nummer', 
       (value, obj, min, max) => { 
        let numberValue: number = parseInt(value); 
        return value === null || value === undefined || Number.isInteger(nummer) && nummer >= min && nummer <= max; 
       }, 
       `\${$displayName} must be an integer between \${$config.min} and \${$config.max}.`, 
       (min, max) => ({ min, max }) 
      ); 

     ValidationRules 
      .ensure((m: this) => m.numberField) 
       .required() 
       .withMessage('Rutan får inte vara tom.') 
       .satisfiesRule('nummer', 1, 100) 
       /*.satisfies((value: any, object?: any) => { 
        console.log(value); 
        if (value >= 1 && value <= 100) { 
         return true; 
        } 
        else { 
         return false; 
        } 
       }) 
       .withMessage(`The number must be between - 100.`)*/ 
      .ensure((m: this) => m.numberField).required() 
      .on(this); 
    } 

    submit(): void { 
     this.executeValidation(); 
    } 

    executeValidation(): void { 
     this.controller.validate() 
     .then(errors => { 
      if (errors.length === 0) { 
       console.log('all good!'); 
      } else { 
       console.log('all errors!'); 
      } 
     }); 
    } 

} 

И это validate.pug (в моем случае, но вы можете использовать HTML-страницу, если вы хотите)

template 
    section.au-animate 
     h2 Validate 

     form(role="form") 
      .form-group 
       label Number 
       input#meetingSubject.form-control(type="text" value.bind="numberField & validate") 

      button.btn.btn-lg.btn-primary(click.delegate='submit()') Validate 
     div 
      h3 ${'latestValidationResult'} 
      ul(if.bind='controller.errors.length') 
       li(repeat.for='error of controller.errors') ${error.message} 
+0

Удивительно, но я думаю, что понимаю все, что вы показали, за исключением '.ensure (m => m.numberField)'. Является ли эта функция тем, что документы aurelia называют «выражением свойства»? Смысл этой функции ускользает от меня. Когда это называется и почему? И указатель на документы для этого будет замечательным. –

0

Не уверен, что, если я понял ваш вопрос, но я думаю, что вы ищете ensureObject:

ValidationRules 
    .ensureObject() 
    .satisfies(obj => { 
     return obj.property1 === 'test' && obj.property2.indexOf('test2') !== -1 
    }) 
    .withMessage('Some error message.') 
    .on(this); 
+0

Я выполнил поиск в 'proofObject' в документах aurelia и ничего не нашел. Можете ли вы рассказать, где это узнать? Может быть, вы могли бы просто объяснить, что означает «obj». Как получить 'obj' для тестирования для каждого объекта в массиве, как и каждое свойство' prop' в 'this.rows = [{prop: 1}, {prop: 2}]'? –

+0

Документы можно найти по адресу http://aurelia.io/hub.html#/doc/article/aurelia/validation/latest/validation-basics/8. Если вы хотите проверить каждое свойство в массиве, просто перейдите по массиву и верните значение false, если значение не соответствует критериям –

+0

'sureObject' не находится в результатах поиска по этой ссылке. Кроме того, этот код не производит никакого вывода независимо от того, насколько я изменяю форму 'ValidationRules.ensureObject(). Satisfies (obj => console.log (obj)). On (this);'. Наверное, я просто буду взламывать его. –