Виджеты удобно использовать при настройке динамических форм, например, если отображение информации на форме или странице зависит от каких-либо условий.
Рассмотрим использование скриптов в виджетах на примере страницы, на которой расположен тест из нескольких вопросов.

Настроим:
- разворачивающиеся блоки с вопросами;
- всплывающее предупреждение о выборе только одного ответа на вопрос;
- модальное окно с результатом теста: пройден или нет.
Шаг 1. Создать вопросы
Добавьте вопросы с вариантами ответов для тестирования:
- Откройте страницу и перейдите в дизайнер интерфейсов.
- На вкладке Контекст создайте переменную типа Категория и задайте следующие параметры:
- Отображаемое имя* — введите вопрос, который будет отображаться на странице;
- Имя свойства* — измените автоматически заданное название свойства на question1;
- Тип* — выберите тип Категория с возможностью выбора нескольких вариантов ответа;
- Значения — введите варианты ответов на вопрос. Измените код каждого ответа на n1, n2 и n3 и нажмите Создать.

- Таким же образом создайте несколько вопросов.
Шаг 2. Настроить отображение вопросов
Cделаем так, чтобы по умолчанию все вопросы на странице были свёрнуты, а при нажатии Начать тестирование раскрывался первый вопрос. Для этого:
- В дизайнере интерфейсов на вкладке Контекст создайте переменную Развернуть вопрос 1 (showQuestion1) с типом Выбор «да/нет».
- Добавьте на поле для моделирования виджет Панель с заголовком.
- В открывшемся окне настроек задайте параметры:
- Заголовок* — введите название панели Вопрос №1;
- Сворачиваемая — выберите Да;
- Развернута — укажите созданную ранее переменную Развернуть вопрос 1. С помощью этой переменной блок с вопросом будет разворачиваться при нажатии кнопки, которая добавляется далее.

- Нажмите кнопку Сохранить.
- Добавьте на поле для моделирования виджет Кнопка.
- В открывшемся окне настроек задайте параметры:
- Надпись/Подсказка* — введите название кнопки Начать тестирование;
- Выполняемый скрипт — добавьте скрипт, который будет изменять значение переменной Развернуть вопрос 1 (showQuestion1) на true. Для этого нажмите кнопку Создать, укажите название функции startTest, выберите Сохранить, а затем — Открыть.

На открывшейся вкладке Скрипты пропишите в созданной функции следующий код:
async function startTest(): Promise<void>{
Context.data.showQuestion1 = true
}
- Сохраните настройки.
- Разместите внутри виджета Панель с заголовком созданное ранее свойство типа Категория с первым вопросом, перетащив его с боковой панели дизайнера. На странице свойство будет отображаться в виде виджета Строка формы.

- Добавьте на поле для моделирования столько панелей с заголовком, сколько у вас создано вопросов. Задайте название для каждой панели и в поле Сворачиваемая выберите Да. В поле Развернута укажите Нет. Поместите свойства с вопросами в панели.
- Сохраните и опубликуйте внесённые изменения.
После этого все вопросы на странице будут отображаться в свёрнутом виде, а при нажатии кнопки Начать тестирование первый вопрос будет автоматически раскрываться.
Шаг 3. Настроить отображение предупреждения
Предположим, что в первом вопросе может быть только один вариант ответа. Если пользователь отметил несколько ответов, при попытке перехода к следующему вопросу на форме отобразится виджет Информационный блок с предупреждением. При наведении курсора блок исчезнет.
Для этого выполните следующие действия:
- В дизайнере интерфейсов на вкладке Контекст создайте переменную Один ответ (oneAnswer) с типом Выбор «да/нет».
- Добавьте на поле для моделирования виджет Информационный блок. В открывшемся окне настроек перейдите на вкладку Системные в поле Видимость выберите опцию Показать по условию. Затем укажите переменную Один ответ. Отображение информационного блока будет зависеть от значения этой переменной.

- Настройте проверку количества выбранных ответов. Для этого:
- выделите виджет Строка формы, содержащий первый вопрос, и откройте его настройки, нажав значок шестерёнки:

- перейдите на вкладку События и добавьте скрипт, который будет проверять количество выбранных ответов и изменять значение переменной Один ответ. Для этого в опции Событие при изменении значения нажмите кнопку Создать, введите название функции checkQuestion1, выберите Сохранить, а затем — Открыть;
- на открывшейся вкладке Скрипты укажите код, который будет определять значение переменной Один ответ (oneAnswer):
async function checkQuestion1(): Promise<void> {
if (Context.data. question1 && Context.data. question1.length > 1) {
Context.data.oneAnswer = true
} else {
Context.data.oneAnswer = false;
}
}
- В настройках виджета Информационный блок в поле Событие при наведении курсора добавьте скрипт, который будет изменять значение переменной Один ответ (oneAnswer) на false:
async function closeBlock(): Promise<void> {
Context.data.oneAnswer = false
}
- В блоке Вопрос №1 добавьте виджет Кнопка, назовите её Следующий вопрос и привяжите скрипт для проверки ответа в первом вопросе. При нажатии на эту кнопку:
- если ответов больше одного — отобразится информационный блок с заданным в нём текстом, например, Выберите только один вариант;
- если выбран один ответ — блок первого вопроса закроется, и пользователь перейдёт ко второму вопросу.
async function nextQuestion(): Promise<void> { |
- Сохраните и опубликуйте внесённые изменения.
Шаг 4. Настроить отображение результатов теста
Завершив тестирование, пользователь нажмёт кнопку Проверить правильность результатов. После этого на странице отобразится всплывающее окно с результатом теста и кнопкой для закрытия окна.
Для этого:
- В дизайнере интерфейсов на вкладке Контекст создайте две переменные с типом Выбор «да/нет»:
- Правильно (correct) — хранит результат выполнения теста;
- Результат (showResult) — отвечает за видимость модального окна с результатом теста.
- Добавьте на поле для моделирования виджет Модальное окно.
- В настройках виджета в поле Показать окно укажите переменную Результат (showResult), созданную ранее. Отображение модального окна будет зависеть от значения этой переменной.

- В модальном окне добавьте два виджета Информационный блок. Один отобразится при успешном прохождении теста, а второй — в случае неуспеха.
Настройте их поочерёдно:
- для успешного результата в настройках одного виджета:
- на вкладке Основные заполните поля Тип информации — Положительный результат, Заголовок — Тест пройден успешно;
- на вкладке Системные в поле Видимость выберите Показать по условию и привяжите созданную ранее переменную Правильно (correct);
- для неуспешного результата в настройках второго виджета:
- на вкладке Основные заполните поля Тип информации — Ошибка, Заголовок — Тест не пройден;
- на вкладке Системные в поле Видимость выберите Скрывать по условию и привяжите ту же переменную Правильно (correct).
- Чтобы после просмотра результатов теста пользователь мог их скрыть, добавьте внутри модального окна виджет Кнопка. В настройках кнопки укажите её название. В опции Тип действия выберите Скрипт и добавьте код:
async function closeResult(): Promise<void> {
Context.data.showResult = false;
}
- Чтобы отобразить настроенное модальное окно с результатами теста на странице, добавьте на поле для моделирования ещё один виджет Кнопка.
В настройках кнопки в поле Выполняемый скрипт добавьте код, который будет определять правильность выбранных ответов и показывать один из блоков:
- Тест пройден успешно — если выбраны правильные ответы;
- Тест не пройден — если выбран неправильный ответ.
Пример скрипта для проверки правильности вопроса и отображения результата
async function resultTest(): Promise<void> {
|
- Сохраните и опубликуйте внесённые изменения.