одиночное требование в сообщении об ошибке петрушки% s1 - PullRequest
0 голосов
/ 01 марта 2020

Привет У меня есть собственный валидатор с 2 требованиями (аргументы / параметры) в петрушке. js

Для сообщения об ошибке я хочу отобразить только одно из требований, но не могу понять, как

        messages: {en: 'You must choose at least one language with %s'},

Я думал, что% s1 или% s0 могут работать, но они не

% s приводит к этому сообщению:

Вы должны выбрать хотя бы один язык как [native, enrolment_form_new_instruction_languages_proficidity]

но я просто хочу

Вы должны выбрать хотя бы один язык как родной

вот мой полный Валидатор на случай, если вам ответят:

  Parsley.addValidator('oneChildEquals', {
    requirementType: ['string', 'string'],
    validateString: function(_value, requirement, requirement2, instance) {
      var $inputs = $(instance.element).find("select.language-proficiency");
      var valid = false;
      $inputs.each(function(i){
        if($(this).val() == requirement){
          valid = true; // one input has the target value (requirement2)
          return false; //break out of the loop
        }
      });
      // no input has the target value (requirement2)
      return valid;
    },
    messages: {en: 'You must choose at least one language with %s'},
  });

1 Ответ

0 голосов
/ 17 апреля 2020

Я написал решение, возможно, его можно улучшить, но я даже не знаю, нужно ли мне это сейчас. В любом случае, если кто-то еще это сделает, вы можете просто добавить этот код:

      if(typeof(string) === 'string' && typeof(parameters) === 'string' && parameters.match(/^\[.*\]$/) && string.match(/\%s\d/)){

        //parameters are an array of values and string is trying to access them individually with %s1 to get first etc
        var paramsArray = parameters.slice(1, parameters.length-1).split(',');
        var interpolations = string.match(/\%s\d/g);
        for(var j = 0; j < interpolations.length ; j++){
          var interpolation = interpolations[j];
          var number = parseInt(interpolation.replace("%s", ''));

          if(isNaN(number)){
            string = string.split(interpolation).join(interpolation + '[not a valid interpolation]');
          }else {
            var val = paramsArray[number-1];
            if(typeof(val) === 'undefined'){
              val = interpolation + '[not a valid interpolation]';
            }
            string = string.split(interpolation).join(val);
          }
        }

        return string
      }

после этого кода в источнике

    formatMessage: function formatMessage(string, parameters) {
      if ('object' === _typeof(parameters)) {
        for (var i in parameters) {
          string = this.formatMessage(string, parameters[i]);
        }

        return string;
      }

и до

      return 'string' === typeof string ? string.replace(/%s/i, parameters) : '';

Тогда он поддерживает такие вещи, как

      Parsley.addValidator('testParsley', {
        requirementType: ['string','string'],
        validateString: function(_value, requirement, requirement2) {
            return (_value === requirement || _value === requirement2);
          },
        messages: {en: 'test parsley this field must equal %s1 or %s2'}
      });
...