Валидация и инициализация

Здравствуйте!

Работаю с кодом страницы редактирования.

Необходимо в metods: {} реализовать некую логику. Использую onEntityInitialized и setValidationConfig.

onEntityInitialized - чтобы в момент загрузки страницы получить данные из БД (с помощью ESQ).

setValidationConfig - чтобы реализовать валидацию на основе данных полученных в момент инициализации.

Но в дебаге в консоли браузера увидел, что первым отрабатывает setValidationConfig, а вторым onEntityInitialized. Соответственно на момент работы валидации данных там нет, там underfained. И валидация должным образом не работает.

ВОПРОС: как заставить onEntityInitialized работать в первую очередь, уже потом setValidationConfig  для поверки условия?

Нравится

4 комментария
Лучший ответ

Всё запускается в нужном порядке, ничего менять не надо. Заданы эти функции в базовых страницах: setValidationConfig — в BaseSchemaViewModel, а onEntityInitialized — в BasePageV2.

Павел, функция setValidationConfig не выполняет саму валидацию, а лишь навешивает на поля функции-валидаторы. И уже они запускаются во время открытой и инициализированной карточки и в них идёт работа со значениями полей.

Подробнее см. пример в академии: Добавление валидации к полю страницы

Схема страницы с валидацией оттуда:

define("OpportunityPageV2", [], function() {
    return {
        // Название схемы объекта страницы редактирования.
        entitySchemaName: "Opportunity",
        methods: {
            // Метод-валидатор значения колонок [DueDate] и [CreatedOn].
            dueDateValidator: function() {
                // Переменная для хранения сообщения об ошибке валидации.
                var invalidMessage = "";
                // Проверка значений колонок [DueDate] и [CreatedOn].
                if (this.get("DueDate") < this.get("CreatedOn")) {
                    // Если значение колонки [DueDate] меньше значения колонки [CreatedOn], 
                    // в переменную invalidMessage помещается значение локализуемой строки с сообщением
                    // об ошибке валидации.
                    invalidMessage = this.get("Resources.Strings.CreatedOnLessDueDate");
                }
                // Объект, свойство которого содержит сообщение об ошибке валидации.
                // Если валидация прошла успешна, в объекте возвращается пустая строка.
                return {
                    // Сообщение об ошибке валидации.
                    invalidMessage: invalidMessage
                };
            },
            // Переопределение базового метода, инициализирующего пользовательские валидаторы.
            setValidationConfig: function() {
                // Вызывает инициализацию валидаторов родительской модели представления.
                this.callParent(arguments);
                // Для колонки [DueDate] добавляется метод-валидатор dueDateValidator().
                this.addColumnValidator("DueDate", this.dueDateValidator);
                //Для колонки [CreatedOn] добавляется метод-валидатор dueDateValidator().
                this.addColumnValidator("CreatedOn", this.dueDateValidator);
            }
        }
    };
});

 

Зверев Александр,

А как сделать, чтобы onEntityInitialized запускалось в первую очередь?

Всё запускается в нужном порядке, ничего менять не надо. Заданы эти функции в базовых страницах: setValidationConfig — в BaseSchemaViewModel, а onEntityInitialized — в BasePageV2.

Зверев Александр,

Спасибо!

Показать все комментарии