Skip to main content

Зависимости

Между виджетами, филдсетами или полями можно установить зависимости. Зависимоcти задаются выражениями на языке JavaScript.

Блокировка#

Блокировка позволяет сделать компонент недоступным для редактирования в определенных условиях.

Блокировка полей ввода#

Поле можно заблокировать по условию с помощью элемента <enabling>:

Блокирование поля по условию
<input-text id="maidenName" label="Девичья фамилия">  <dependencies>    <!-- Поле "Девичья фамилия" доступно для редактирования, если пол женский, где         gender - это поле в источнике данных виджета с текущей моделью данных -->    <enabling>gender == 'woman'</enabling>  </dependencies></input-text>

Существует короткая запись условия блокировки поля с помощью атрибута enabled. Атрибут enabled принимает значение true или false, но его можно задать через javaScript выражение, записанное в фигурных скобках:

Короткая запись условия блокировки поля
<input-text id="maidenName"            label="Девичья фамилия"            enabled="{gender == 'woman'}"/>    <!-- Поле "Девичья фамилия" доступно для редактирования, если пол женский, где         gender - это поле в источнике данных виджета с текущей моделью данных -->

Блокировка филдсетов#

Филдсет можно заблокировать по условию с помощью атрибута enabled:

Блокирование филдсета по условию
<set id="woman"     label="Девичья фамилия"     enabled="{gender == 'woman'}">  <!-- Филдсет "Девичья фамилия" доступен для редактирования, если пол женский, где       gender - это поле источника данных виджета с текущей моделью данных -->  ...</set>

В данном примере переменная gender - это ссылка на другое поле в этой же форме.

Блокировка кнопок#

Кнопку можно заблокировать с помощью элемента <enabling>:

Блокирование кнопки по условию в элементе
<button label="Изменить">  <dependencies>  <!-- Кнопка "Изменить" доступна для нажатия,       если status не равен 1, где       status - это поле в источнике данных main с моделью resolve-->    <enabling datasource="main"              model="resolve">status != 1</enabling>  </dependencies>  ... <!-- Действие --></button>

Существует короткая запись условия блокировки кнопки с помощью атрибута enabled. Атрибут enabled принимает значение true или false, но его можно задать через javaScript выражение, записанное в фигурных скобках:

Блокирование кнопки по условию в атрибуте
<button label="Изменить"        enabled="{status != 1}">  <!-- Кнопка "Изменить" доступна для нажатия, если статус записи не 1, где       status - это поле в текущем источнике данных с текущей моделью данных -->   ... <!-- Действие --></button>

Скрытие#

Скрытие позволяет сделать компонент невидимым в определенных условиях. Условия видимости записываются аналогично условиям блокировки.

Скрытие полей ввода#

Поле можно скрыть по условию с помощью элемента <visibility>:

Скрытие поля по условию через элемент
<input-text id="maidenName" label="Девичья фамилия">    <dependencies>        <!-- Поле "Девичья фамилия" видимо, если пол женский -->        <visibility on="gender">gender == 'woman'</visibility>    </dependencies></input-text>

Существует короткая запись условия скрытия с помощью атрибута visible, аналогично блокировке:

Скрытие поля по условию через атрибут
<input-text id="maidenName"            label="Девичья фамилия"            visible="{gender == 'woman'}"/>    <!-- Поле "Девичья фамилия" видимо, если пол женский -->

Скрытие филдсетов#

Филдсет можно скрыть по условию с помощью атрибута visible:

Скрытие филдсета по условию
<set id="woman"     label="Девичья фамилия"     visible="{gender == 'woman'}">  <!-- Филдсет "Девичья фамилия" видим, если пол женский -->  ...</set>

Скрытие кнопок#

Кнопку <button> можно скрыть по условию с помощью элемента visibility:

Скрытие кнопки по условию через элемент
<button label="Изменить">    <dependencies>        <!-- Кнопка "Изменить" видима, если status не равен 1 -->        <visibility datasource="main"                    model="resolve">status != 1</visibility>    </dependencies>    ... <!-- Действие --></menu-item>

Существует короткая запись условия скрытия кнопки с помощью атрибута visible, аналогично блокировке:

Скрытие кнопки по условию через атрибут
<button label="Изменить"        visible="{status != 1}">    <!-- Кнопка "Изменить" видима, если status не равен 1 -->    ... <!-- Действие --></menu-item>

Скрытие столбцов таблицы#

Столбец таблицы <column> можно скрыть по условию через элемент <visibility>:

Скрытие столбца по условию через элемент
<column text-field-id="shortName">    <dependencies>        <!-- Столбец shortName скроется, если type равен 1, где             type - поле в источнике данных form с моделью resolve -->        <visibility datasource="form"                    model="resolve">type == 1</visibility>    </dependencies>    ... <!-- Ячейка --></column>

Установка значений#

С помощью установки значений можно автоматически заполнять поля ввода по JavaScript выражениям.

Установка значения задаётся с помощью элемента <set-value>:

Установка значения в простом поле
<input-text id="a"/><input-text id="b"/><input-text id="result">    <dependencies>        <!-- Значение result будет изменено на сумму значений a и b,             когда a или b будут изменены -->        <set-value on="a,b">a+b</set-value>    </dependencies></input-text>

В теле <set-value> должно быть записано выражение на языке JavaScript, которое вернёт новое значение поля.

Если в теле необходимо написать не одно, а несколько выражений, то необходимо использовать команду return для явного возврата значения:

Установка значения в списковом поле
<select id="gender" label="Пол">    <dependencies>        <!-- Если фамилия заканчивается, на "а", то устанавливается пол Женский,             иначе значение не меняется. -->        <set-value on="surname">            var obj;            if (surname[surname.length-1]=='а') {                obj = {};                obj.id = 2;                obj.name = 'Женский';            }            return obj;        </set-value>    </dependencies></select>
note

Чтобы значение поля не изменилось после срабатывания <set-value>, просто не нужно ничего возвращать (или вернуть undefined). Чтобы значение очистилось, нужно вернуть null.

Выражение set-value будет срабатывать после изменения другого поля виджета, которое можно указать в атрибуте on:

Установка значения в чекбоксе
<checkbox label="Адрес проживания совпадает с регистрацией">    <dependencies>        <!-- Если адрес проживания совпадает с адресом регистрации,             то чекбокс выделяется, иначе выделение снимается  -->        <set-value on="addressReq, addressFact">              if (addressReq == addressFact)                return true;              else                return false;        </set-value>    </dependencies></checkbox>
warning

Необходимо возвращать значение поля в том формате, в котором работает компонент. Например, списковые компоненты единственного выбора ожидают объект с id и другими свойствами. Списковые компоненты множественного выбора ожидают список объектов.

Обязательность заполнения полей#

Можно сделать поле обязательным для заполнения в определенных условиях через элемент <requiring>:

Условие обязательности заполнения поля через элемент
<input-text id="maidenName"            label="Девичья фамилия">    <dependencies>        <requiring>gender == 'woman'</requiring>    </dependencies></input-text>

Существует короткая запись условия обязательности поля с помощью атрибута required. Атрибут required принимает значение true или false, но его можно задать через javaScript выражение, записанное в фигурных скобках:

Условие обязательности заполнения поля через атрибут
<input-text id="maidenName"            label="Девичья фамилия"            required="{gender == 'woman'}"/>