Расширение блоков
В NocoBase блок (Block) — это область содержимого на странице (например, таблица, форма, график, детали и т.д.). Унаследовав базовые классы серии BlockModel, Вы можете создавать пользов ательские блоки и регистрировать их в меню «Добавить блок».
Выбор базового класса
NocoBase предоставляет четыре базовых класса блока — выбирайте в зависимости от потребностей в данных:
Цепочка наследования: BlockModel → DataBlockModel → CollectionBlockModel → TableBlockModel.
Обычно, если Вам нужен готовый блок таблицы, используйте TableBlockModel напрямую — у него встроены с толбцы полей, панель действий, пагинация, сортировка и другие возможности, это самый часто используемый базовый класс. Если нужен полностью пользовательский способ рендеринга (например, список карточек, временная шкала и т.д.), используйте CollectionBlockModel и пишите renderComponent самостоятельно. Если требуется только отображать статичный контент или пользовательский UI, достаточно BlockModel.
DataBlockModel имеет особое позиционирование — сам по себе он не добавляет никаких новых свойств или методов, тело класса пустое. Его роль — классифицирующий идентификатор: блоки, наследующие DataBlockModel, попадают в группу меню «Блоки данных» в UI. Если Ваш блок должен сам управлять логикой получения данных (не используя стандартную привязку Collection в NocoBase), можно унаследовать DataBlockModel. Например, ChartBlockModel плагина графиков именно такой — он использует пользовательский ChartResource для получения данных, не нуждаясь в стандартной привязке к таблице данных. В большинстве сценариев DataBlockModel напрямую использовать не нужно — достаточно CollectionBlockModel или TableBlockModel.
Пример BlockModel
Самый простой блок — поддерживающий редактирование HTML-содержимого:
Этот пример охватывает три шага разработки блока:
renderComponent()— рендеринг UI блока, чтение свойств черезthis.propsdefine()— установка отображаемого имени блока в меню «Добавить блок»registerFlow()— добавление панели визуальной конфигурации, пользователь может в интерфейсе редактировать HTML-содержимое
Пример CollectionBlockModel
Если блок должен быть привязан к таблице данных NocoBase, используйте CollectionBlockModel. Он автоматически обрабатывает получение данных:
По сравнению с BlockModel, у CollectionBlockModel есть дополнительно:
static scene— объявление сценария блока. Распространённые значения:BlockSceneEnum.many(список нескольких записей),BlockSceneEnum.one(детали/форма одной записи). Полное перечисление также включаетnew,select,filter,subForm,bulkEditFormи т.д.createResource()— создание ресурса данных,MultiRecordResourceдля получения нескольких записейthis.resource.getData()— получение данных таблицы данных
Пример TableBlockModel
TableBlockModel наследует CollectionBlockModel и является встроенным в NocoBase полноценным блоком таблицы — со встроенными столбцами полей, панелью действий, пагинацией, сортировкой и другими возможностями. То, что выбирает пользователь в «Добавить блок» → «Table», — это и есть он.
Обычно, если встроенного TableBlockModel достаточно для нужд, пользователю достаточно добавить его прямо в интерфейсе, разработчику ничего делать не нужно. Только когда Вам нужно выполнить кастомизацию на основе TableBlockModel, нужно его наследовать — например:
- Переопределить
customModelClassesдля замены встроенных моделей групп действий или столбцов полей - Через
filterCollectionограничить доступность только для определённой таблицы данных - Зарегистрировать дополнительные Flow, чтобы добавить пользовательские пункты конфигурации
Полный пример кастомизации TableBlockModel см. в Создание плагина управления данными с интеграцией фронтенда и бэкенда.
Регистрация блока
Зарегистрируйте в load() Plugin:
После регистрации в интерфейсе NocoBase нажмите «Добавить блок» — и Вы увидите Ваш пользовательский блок.
Полный исходный код
- @nocobase-example/plugin-simple-block — пример BlockModel
- @nocobase-example/plugin-collection-block — пример CollectionBlockModel
Связанные ссылки
- Практика плагинов: создание пользовательского блока отображения — построение конфигурируемого блока BlockModel с нуля
- Практика плагинов: создание плагина управления данными с интеграцией фронтенда и бэкенда — полный пример TableBlockModel + пользовательское поле + пользовательское действие
- Обзор FlowEngine — базовое использование FlowModel и registerFlow
- Расширение полей — пользовательские компоненты полей
- Расширение действий — пользовательские кнопки действий
- Шпаргалка по Resource API — полные сигнатуры методов MultiRecordResource / SingleRecordResource
- Определение FlowDefinition — полные параметры registerFlow и типы событий
- Полная документация FlowEngine — полный справочник

