2015-11-30 3 views
3

Ввод для плагина проверки aurelia содержит раздел о создании пользовательских ValidationRules, расширяя класс ValidationRule и передавая его функции pass. Приведенный пример выглядит следующим образом:Как написать пользовательский параметр ValidationRule

import {ValidationRule} from './plugins/validation/'; 
export class MyValidationRule extends ValidationRule{ 
constructor (isValid) { 
    super(
     isValid, //pass any object as 'threshold' 
     (newValue, threshold) => { //pass a validation function 
      return threshold; 
     } 
     (newValue, threshold) => { //Optionally pass a function that will provide an error message 
      return `needs to be at least ${threshold} characters long`; 
     }, 
    ); 
} 
} 

Что мне делать с этим? Например, для демонстрационных целей, если бы я хотел создать функцию, которая проверяет, является ли значение номером телефона с регулярным выражением, как бы я код, который использует этот шаблон? Я спрашиваю, потому что документация разрежена примерами; для написания пользовательских правил проверки нет, а в другом примере показано, как добавить его в прототип ValidationGroup, но я хотел бы знать оба метода добавления настраиваемого правила.

ответ

3

Во-первых, вам не нужно создавать пользовательскую проверку класс правил. Вы можете просто создать функцию, которая принимает аргумент и возвращает результат проверки, например.

function validatePhoneNumber(newValue) { 
    return true/*your RegExp check should return true/false here*/; 
} 

, а затем

this.validation = validation.on(this) 
          .passes(validatePhoneNumber); 

Если вы думаете, нужен класс, чтобы сделать проверки более общий характер, попробовать что-то вроде

import {ValidationRule} from './plugins/validation/'; 
export class RegExpValidationRule extends ValidationRule { 
    constructor (regExp, errorMessage) { 
     super(
      regExp, 
      (newValue, threshold) => { 
       return true/*your RegExp check should return true/false here*/; 
      }, 
      (newValue, threshold) => { 
       return errorMessage; 
      } 
     ); 
    } 
} 

, а затем

var validationRule = new RegExpValidationRule(/*your RegExp*/, 'Invalid phone number'); 
this.validation = validation.on(this) 
          .passesRule(validationRule); 
+0

Это может быть что я ищу. Глупый вопрос, но нужно ли мне импортировать настраиваемое правило в вызывающий класс, чтобы это правильно подключалось? – jbailie1991

+0

Да, просто импортируйте {RegExpValidationRule} из 'yourfile'; – Mikhail

+0

Теперь я получаю следующую консольную ошибку: 'Отказ от необработанного обещания Ошибка: Неожиданное поведение: сборка правил проверки должна всегда выполняться' ' at Ошибка (родная) по адресу http://10.172.102.162:9000/jspm_packages/ npm/[email protected]/validation-property.js: 79: 19 по h (http://10.172.102.162:9000/jspm_packages/npm/[email protected]/client/shim.min .js: 1773: 66) по адресу http://10.172.102.162:9000/jspm_packages/npm/[email protected]/client/shim.min.js:1778:19 на MutationObserver.e (http: //10.172.102.162:9000/jspm_packages/npm/[email protected]/client/shim.min.js:1958:55) ' – jbailie1991