Обзор ui.entity-selector
ui.entity-selector — JavaScript-расширение Bitrix Framework для интерфейсов выбора пользователей, подразделений и объектов модуля. Элементы CRM, объекты каталога и другие типы подключаются через провайдеры соответствующих модулей или через собственный провайдер данных.
Расширение экспортирует два основных виджета:
Dialog— всплывающее окно выбора объектов;TagSelector— поле, которое показывает выбранные объекты тегами.
JavaScript-классы создают интерфейс в браузере и обрабатывают выбор пользователя. PHP-классы Bitrix\UI\EntitySelector загружают элементы, выполняют серверный поиск, возвращают заранее выбранные элементы и работают с недавними элементами.
Выбрать статью
| Задача | Статья |
|---|---|
| Открыть список рядом с кнопкой или полем, настроить параметры, методы и события окна выбора | Dialog |
| Показать выбранные элементы тегами, настроить параметры, методы и события поля с тегами | TagSelector |
| Загрузить элементы с сервера или зарегистрировать собственный тип объекта | Провайдеры данных |
| Выбрать пользователей, отделы, проекты, чаты или чат-ботов | Стандартные провайдеры |
| Настроить общие структуры отображения: текстовые узлы, аватары, бейджи, футеры и заголовки | Общие параметры |
Подключить расширение
Если вы подключаете компонент из PHP, загрузите расширение ui.entity-selector. Метод Extension::load() добавляет на страницу JavaScript и CSS расширения.
\Bitrix\Main\UI\Extension::load('ui.entity-selector');
В модульном JavaScript импортируйте нужные классы из ui.entity-selector.
import { Dialog, TagSelector } from 'ui.entity-selector';
Если расширение нужно подключить перед созданием диалога, используйте Runtime.loadExtension. Метод загружает расширение в браузере и возвращает экспорты после загрузки.
import { Runtime } from 'main.core';
Runtime.loadExtension('ui.entity-selector').then((exports) => {
const { Dialog } = exports;
const button = document.getElementById('responsible-button');
if (!button)
{
return;
}
const dialog = new Dialog({
targetNode: button,
items: [
{
id: 1,
entityId: 'user',
title: 'Иван Петров',
},
],
});
button.addEventListener('click', () => {
dialog.show();
});
});
Минимальный локальный элемент содержит три поля:
| Поле | Тип | Назначение |
|---|---|---|
id |
number или string |
Идентификатор элемента внутри типа объекта |
entityId |
string |
Идентификатор типа объекта, например user или собственный тип модуля |
title |
string |
Текст элемента в диалоге или теге |
Основные правила
targetNodeдолжен быть существующим DOM-элементом. Проверяйте результатdocument.getElementById()перед созданиемDialogилиTagSelector.entities[].idзадает тип объекта для серверной загрузки и поиска. Это значение должно совпадать сentityId, для которого зарегистрирован PHP-провайдер в настройках модуля.items[].entityIdу локального элемента должен содержать тот же идентификатор типа объекта, что иentities[].id, если локальные и серверные элементы относятся к одному типу.dynamicLoadиdynamicSearchработают только для типа объекта, у которого зарегистрирован доступный PHP-провайдер.contextзадавайте отдельно для разных форм и действий, чтобы недавние элементы не смешивались между сценариями.