2016-12-08 4 views
0

У меня есть набор предопределенных правил, которые загружаются с помощью вызова отдыха с внешнего ресурса.пользовательский валидатор parsleyjs с вычисленным сообщением

rules.yaml

rules: 
    firstname: 
    rule: value.length <= params.max 
    message: Bitte geben Sie nicht mehr als {{params.max}} Zeichen ein 
    params: 
     max: 20 
    lastname: 
    rule: value.length <= params.max 
    message: Bitte geben Sie nicht mehr als {{params.max}} Zeichen ein 
    params: 
     max: 30 

Тогда я написал собственный валидатор вроде этого:

window.Parsley.addValidator('rules', { 
    rules: rules, 
    validateString: function (value, requirement) { 
     let constraint = rules[requirement]; 
     if (constraint) { 
      let params = constraint.params; 
      if (constraint.message) { 
       let errorMessage = Mustache.render(constraint.message, {params: params, value: value}); 
      } 
      return !value || eval(constraint.rule); 
     } else { 
      console.log('Invalid constraint: $requirement could not be found inside $rules'); 
      return false; 
     } 
    }, 
    requirementType: 'string', 
    messages: { 
     en: 'The string ist invalid %s.', 
     fr: 'Ce nombre n\'est pas un multiple de %s.' 
    } 
}); 

Validation работает, как ожидалось. Но, как вы можете видеть, сообщение об ошибке динамически вычисляется во время проверки. Как Parsley может использовать мое вычисляемое сообщение в этой настройке?

ответ

1

Вместо true или false вы можете вернуть сбойное обещание с аргументом, являющимся сообщением об ошибке.

return $.Deferred().reject('Custom error message') 
+0

Файл определения правил содержит еще много бизнес-правил, а некоторые более сложные, чем эти простые. Файл правил разделяется между несколькими проектами. Мы даже разделяем эти правила между интерфейсом и бэкэнд, поэтому мне нужно что-то, как правило, интерпретатор. –

+0

Лучшие независимые пользовательские валидаторы. С помощью своего стандартного валидатора «meta» вы фактически не используете какую-либо логику. –

Смежные вопросы