Работа с элементами управления
Элементы управления являются частью разметки. Ссылка на коллекцию элементов управления разметки содержится в её поле controls
:
let layoutControls = someLayout.controls; (1)
1 | someLayout — разметка. |
Доступ к элементу управления осуществляется по названию, которое ему присвоено в программе Конструктор Web-разметок:
let registrar = layoutManager.cardLayout.controls.get<Employee>("registrar"); (1)
1 | Получаем элемент управления Сотрудник (Employee) с названием "registrar" из разметки карточки (layoutManager.cardLayout). |
Доступ к свойствам и значению элемента управления осуществляется через его поле
params
:let registrarName = registrar.params.value.displayName; (1)
registrar.params.visibility = false; (2)
1 | Получаем значение элемента управления registrar (params.value), из которого получаем отображаемое имя сотрудника (displayName). |
2 | Изменяем значения свойства Видимость на "false" (элемент управления будет скрыт). |
Изменение значения элемента управления осуществляется через свойство params.value.
Способ изменения зависит от типа значения:
Для простых типов (string, bool, int и пр.) значение изменяется напрямую:
let onControl = layoutManager.cardLayout.controls.get<CheckBox>("onControl"); (1)
onControl.params.value = true; (2)
1 | Получаем из разметки карточки элемент управления Флаг (CheckBox) с названием "onControl". |
2 | Изменяем значения элемента управления на true (флаг будет установлен). |
Для элемента управления Дата/время значение должно быть предварительно сформировано:
let endDate = layoutManager.cardLayout.controls.get<DateTimePicker>("endDate"); (1)
endDate.value = new Date("2019-03-01T12:00:00"); (2)
1 | Получаем из разметки карточки элемент управления Дата/время (DateTimePicker) с названием "endDate". |
2 | Изменяем значения элемента управления на дату 01.03.2019 и время 12:00:00. |
Для элементов управления, работающих с моделями объектов, значение должно быть предварительно сформировано:
export async function someHandler(sender: CustomButton, e: IEventArgs) { (1)
let departmentControllerService = sender.layout.getService($DepartmentController); (2)
let departmentModel = await departmentControllerService.getStaffDepartment("67E331F0-EF31-4E2C-A1F6-D527606EC8CA"); (3)
let department = sender.layout.controls.get<Department>("department"); (4)
department.params.value = departmentModel; (5)
}
1 | Функция является асинхронной. |
2 | Получаем сервис, загружающий модель объекта для элемента управления Подразделение и Подразделение контрагента. |
3 | Получаем модель объекта для подразделения с идентификатором "67E331F0-EF31-4E2C-A1F6-D527606EC8CA". |
4 | Получаем из разметки карточки элемент управления Подразделение (Department) с названием "department". |
5 | Сохраняем в значение элемента управления полученную ранее модель. В элементе управления будет выбрано подразделение с идентификатором "67E331F0-EF31-4E2C-A1F6-D527606EC8CA". |
Список сервисов генерации моделей объектов приведён в пункте Сервисы генерации моделей объектов. |
Управление блокировкой элемента управления от изменений осуществляется с помощью параметра disabled:
let control = layoutManager.cardLayout.controls.superControl; (1)
control.params.disabled = true (2)
1 | Получение элемента управления superControl. |
2 | Блокировка элемента управления.
Параметр disabled работает совместно с параметром editOperation:
|
Для отрисовки заблокированного элемента управления вызывается метод BaseControlImpl.renderDisabledControl
, который может быть переопределён, если требуется собственная реализация отрисовки заблокированного элемента управления.