Пользовательская проверка автоформы метеора не реактивна

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

num: {
    type: Number,
    label: "Number",
    min: 1,
    decimal: false, // unnecessary as this is default for Number, but for future reference
    autoform: {
        group: "Info",
        defaultValue: function() {
            //@TODO - default to next number for logged in user
            return 5;
        }
    },
    custom: function () {
           Collection.simpleSchema().namedContext("addNumberForm").addInvalidKeys([{name: "num", type: "numNotUnique"}]);
    }
},

Я определил для него специальное сообщение об ошибке

SimpleSchema.messages({numNotUnique: "This number has already been entered"});

Когда я отправляю форму, я могу подтвердить, что пользовательская функция выполняется, но ничего не меняется в пользовательском интерфейсе для этого поля, указывающего на ошибку. Имя контекста «addNumberForm» я получил из настройки SimpleSchema.debug = true; и увидел, что было выбрано для других полей с проверкой по умолчанию.

Что мне здесь не хватает?


person Matt Beckett    schedule 30.08.2015    source источник


Ответы (1)


После долгих проб и ошибок я понял это.

Именованный контекст simpleSchema необходим только при ручной проверке с использованием simpleSchema. Autoform позаботится об этом, а пользовательская функция может вернуть простую строку, определяющую ошибку.

num: {
    type: Number,
    label: "Number",
    min: 1,
    decimal: false, // unnecessary as this is default for Number, but for future reference
    autoform: {
        group: "Info",
        defaultValue: function() {
            //@TODO - default to next number for logged in user
            return 5;
        }
    },
    custom: function () {
        // some check
        return 'numNotUnique'; // return our error
    }
},
person Matt Beckett    schedule 02.09.2015
comment
Как проверить вызовы методов в custom? - person Ramesh Murugesan; 03.11.2015
comment
Хороший ответ, но как бы вы поступили, если хотите аннулировать одно поле из другого? - person Kostanos; 23.04.2016