JS Item
Введение
JS Item используется для отображения в панели опера ций «кастомного пункта действия». Вы можете напрямую писать JavaScript / JSX и выводить любой UI: кнопку, группу кнопок, выпадающее меню, текстовую подсказку, ярлык состояния или небольшие интерактивные компоненты, а внутри компонента — обращаться к интерфейсам, открывать всплывающие окна, читать текущую запись или обновлять данные Block.
JS Item можно использовать в панели инструментов формы, панели инструментов таблицы (на уровне коллекции), действиях строки таблицы (на уровне записи) и т. п. Подходит для следующих случаев:
- Нужно настроить структуру кнопки, а не просто привязать к ней обработчик клика;
- Нужно объединить несколько действий в группу кнопок или выпадающее меню;
- Нужно отображать в панели операций актуальное состояние, статистику или поясняющие сведения;
- Нужно динамически рендерить разный контент в зависимости от текущей записи, выделенных данных или значений формы.
.png)
Отличия от JS Action
JS Actionбольше подходит для сценария «после нажатия на кнопку выполнить скрипт», основной фокус — логика поведения.JS Itemбольше подходит для сценария «самостоятельно отрендерить пункт действия» — Вы управляете и интерфейсом, и логикой взаимодействия.
Если нужно лишь дополнить существующую кнопку логикой клика, используйте JS Action; если нужно настроить структуру интерфейса пункта действия или отрендерить несколько контролов, выбирайте JS Item.
Контекст времени выполнения (наиболее используемые API)
Во время выполнения JS Item доступны типовые возможности, которые можно использовать в скрипте напрямую:
ctx.render(vnode)— отрендерить React-элемент, HTML-строку или DOM-узел в контейнер текущего пункта действия;ctx.element— DOM-контейнер текущего пункта действия (ElementProxy);ctx.api.request(options)— выполнить HTTP-запрос;ctx.openView(viewUid, options)— открыть настроенное представление (drawer / dialog / страница);ctx.message/ctx.notification— глобальные подсказки и уведомления;ctx.t()/ctx.i18n.t()— интернационализация;ctx.resource— ресурс данных контекста уровня коллекции, например для чтения выделенных записей или обновления списка;ctx.record— текущая запись в контексте уровня записи;ctx.form— экземпляр AntD Form в контексте уровня формы;ctx.blockModel/ctx.collection— мета-информация о текущем Block и коллекции;ctx.requireAsync(url)— асинхронная загрузка AMD / UMD библиотеки по URL;ctx.importAsync(url)— динамический импорт ESM-модуля по URL;ctx.libs.React/ctx.libs.ReactDOM/ctx.libs.antd/ctx.libs.antdIcons/ctx.libs.dayjs/ctx.libs.lodash/ctx.libs.math/ctx.libs.formula— встроенные часто используемые библиотеки, которые можно напрямую использовать для JSX-рендера, работы со временем, обработки данных и математических операций.
Реальный набор доступных переменных зависит от того, где расположен пункт действия. Например, в действиях строки таблицы обычно доступен
ctx.record, в панели инструментов формы —ctx.form, в панели инструментов таблицы —ctx.resource.
Редактор и сниппеты
Snippets— открывает встроенный список сниппетов, по которым можно искать и одним кликом вставлять выбранный фрагмент в текущую позицию курсора.Run— запускает текущий код прямо здесь и выводит логи в нижнюю панельLogs. Поддерживаетсяconsole.log/info/warn/errorи подсветка ошибок с точной локализацией.

- Можно совмещать с AI-сотрудником для генерации/изменения скрипта: AI-сотрудник Nathan: фронтенд-инженер
Типичные сценарии использования (краткие примеры)
1) Рендеринг обычной кнопки
2) Действие коллекции: комбинация кнопки и выпадающего меню
3) Действие записи: открытие представления на основе текущей строки
4) Рендеринг кастомного контента состояния
Замечания
- Если требуется лишь «выполнить логику после нажатия», предпочтительнее использовать
JS Action— реализация будет проще. - При вызовах интерфейсов добавляйте
try/catchи пользовательские подсказки, чтобы исключения не молчали. - При взаимодействии с таблицами, списками и связанными всплывающими ок нами после успешной отправки можно вручную обновить данные через
ctx.resource?.refresh?.()или ресурс соответствующего Block. - При использовании внешних библиотек подгружайте их с проверенного CDN и предусмотрите обработку случая, когда загрузка не удалась.

