Как проверить, истинно ли логическое значение в пользовательской простой схеме проверки в Meteor

У меня есть следующая схема:

Games.attachSchema(new SimpleSchema({
    title: {
        type: String,
        label: "Title",
        max: 30
    },
    multiplayer: {
        type: Boolean,
        label: "Multiplayer",
        denyUpdate: true
    },
    description: {
        type: String,
        label: "Description",
        custom: function() {
            var multiplayer = this.field("multiplayer");
            if (multiplayer.isSet && multiplayer.value && !this.isSet) return "Description is empty!";
            return true;
        }
    }
}));

Моя цель - проверить, пусто ли description, но только если установлен флажок multiplayer. Если флажок не установлен, description заполнять не обязательно.

Я попробовал код выше, но он не проверяется. Даже если у меня нет описания и я поставил галочку, я могу отправить форму.


person user3475602    schedule 01.10.2015    source источник
comment
Я не знаю метеора, но текст "Description is empty!" где-то отображается? Проблема может заключаться в том, что возвращаемая строка оценивается как true. Вместо этого я бы попробовал return false; в качестве теста.   -  person PinkTurtle    schedule 01.10.2015
comment
Спасибо за помощь! Согласно документации: Выполните любую необходимую пользовательскую проверку, и вернуть строку, описывающую тип ошибки, если вы обнаружите, что значение недопустимо. Любое возвращаемое значение, отличное от строки, означает, что значение допустимо.   -  person user3475602    schedule 01.10.2015
comment
Какова ваша логика отправки/проверки формы?   -  person PinkTurtle    schedule 01.10.2015
comment
Я не понимаю вашего вопроса. Моя логика проверки формы находится внутри моей функции custom.   -  person user3475602    schedule 01.10.2015
comment
ОК, мне интересно, есть ли у вас другой код для проверки/отправки формы. Я не знаю метеор извините :p   -  person PinkTurtle    schedule 01.10.2015
comment
Нет проблем @PinkTurtle! Спасибо, в любом случае. Вам стоит это увидеть! Это отличный фреймворк для работы.   -  person user3475602    schedule 01.10.2015
comment
Давайте продолжим обсуждение в чате.   -  person PinkTurtle    schedule 01.10.2015
comment
Это глупый вопрос, но ваш код выдает ошибку? Формы обычно отправляются, когда их код отправки/проверки JS дает сбой. Я бы поискал в Firefox/Firebug.   -  person PinkTurtle    schedule 01.10.2015


Ответы (2)


Я нашел правильную документацию и решил ее. как это:

{
  description: {
    type: String,
    optional: true,
    custom: function () {
      var shouldBeRequired = this.field('multiplayer').value;

      if (shouldBeRequired) {
        // inserts
        if (!this.operator) {
          if (!this.isSet || this.value === null || this.value === "") return "required";
        }

        // updates
        else if (this.isSet) {
          if (this.operator === "$set" && this.value === null || this.value === "") return "required";
          if (this.operator === "$unset") return "required";
          if (this.operator === "$rename") return "required";
        }
      }
    }
  }
}
person user3475602    schedule 01.10.2015
comment
Я думаю, что это примерно эквивалентно моему коду, за исключением того, что я сделал опечатку :) this.value != "" должно было быть this.value == "". - person PinkTurtle; 02.10.2015

Я думаю, проблема в вашей логике проверки. Попробуйте изменить его на:

if (multiplayer.isSet && multiplayer.value && this.isSet && this.value == "")
return "Description is empty!";
person PinkTurtle    schedule 01.10.2015