Перейти к основному содержимому
Версия: 26.1.0 (в разработке)

Interface: EditorEventsApi

API для управления событиями редактора.

Предоставляет методы для подписки на события (изменения документа, выделения, видимой области и ошибки) и получения уведомлений в режиме реального времени.

Четыре основных события:

  • editorError — ошибка в редакторе
  • documentChange — содержимое документа изменилось
  • selectionChange — курсор или выделение переместилось
  • viewportChange — видимая область изменилась

Использование:

editorApi.events.subscribe('documentChange', (payload) => {
console.log('Документ изменился');
});

editorApi.events.subscribeOnce('viewportChange', (payload) => {
console.log('Видимая область изменилась один раз');
});

Methods

subscribe()

subscribe<E>(event, callback): Unsubscribe

Подписывается на событие редактора и вызывает обработчик каждый раз когда событие срабатывает.

Подписка остаётся активной до явной отписки через функцию Unsubscribe.

Type Parameters

E

E extends keyof EditorEvents

Parameters

event

E

Тип события из EventId

callback

EditorEventCallback<E>

Обработчик события (функция с правильной типизацией параметра)

Returns

Функция для отписки от события

Remarks

Типобезопасность:

  • TypeScript автоматически проверит тип обработчика
  • IDE предоставит автодополнение свойств payload
  • Компилятор предупредит об ошибках типов

Когда подписка вызывается:

  • Сразу после каждого события (синхронные обработчики)
  • После разрешения Promise (асинхронные обработчики)

Отписка:

  • Вызовите возвращённую функцию для отписки
  • Или сохраните функцию для последующей отписки в onDestroy

Example

Простая подписка на событие

editorApi.events.subscribe('documentChange', (payload) => {
console.log('Документ изменился:', payload.info);
});

Подписка с сохранением функции отписки

const unsubscribe = editorApi.events.subscribe('selectionChange', (payload) => {
console.log('Курсор в позиции:', payload.selection.start);
});

// Позже отписаться
unsubscribe();

Асинхронный обработчик

editorApi.events.subscribe('documentChange', async (payload) => {
// Выполнить асинхронную операцию
await saveToServer();
editorApi.ui.toasts.showToast({ id, content: 'Сохранено' });
});

Подписка на несколько событий

export default {
onInit: (editorApi) => {
const unsubscribeChange = editorApi.events.subscribe('documentChange', (payload) => {
console.log('Содержимое изменилось');
});

const unsubscribeSelection = editorApi.events.subscribe('selectionChange', (payload) => {
console.log('Выделение изменилось');
});

const unsubscribeError = editorApi.events.subscribe('editorError', (payload) => {
console.error('Ошибка:', payload.error);
});

return () => {
unsubscribeChange();
unsubscribeSelection();
unsubscribeError();
};
}
}

See

  • EditorEventCallback — типизация обработчика
  • EventId — доступные события
  • Unsubscribe — функция отписки от слежения за событием

subscribeOnce()

subscribeOnce<E>(event, callback): Unsubscribe

Подписывается на событие, но срабатывает только один раз.

После первого срабатывания событие автоматически отписывается. Возвращённая функция отписки становится неработающей после первого вызова.

Type Parameters

E

E extends keyof EditorEvents

Parameters

event

E

Тип события из EventId

callback

EditorEventCallback<E>

Обработчик события (вызывается максимум один раз)

Returns

Функция для явной отписки (становится недействительной после первого события)

Remarks

Использование:

  • Ожидание единовременного события (первое сохранение, инициализация)
  • Проверка первого изменения
  • Одноразовая обработка

Отличие от on():

  • on() — подписка остаётся активной
  • once() — подписка отменяется после первого события

Обработчик будет вызван:

  • Один раз при первом срабатывании события
  • Никогда больше, даже если событие случится снова

Example

Одноразовая подписка на изменение документа

editorApi.events.subscribeOnce('documentChange', (payload) => {
console.log('Первое изменение документа');
// Этот обработчик будет вызван только один раз
});

Ожидание ошибки (только первой)

editorApi.events.subscribeOnce('editorError', (payload) => {
console.error('Первая ошибка:', payload.error);
// Даже если произойдут другие ошибки, этот обработчик не будет вызван
});

Проверка первого изменения выделения

const unsubscribe = editorApi.events.subscribeOnce('selectionChange', (payload) => {
console.log('Пользователь первый раз переместил курсор');
editorApi.ui.toasts.showToast({ id, content: 'Курсор активен' });
});

// Можно отписаться явно до первого события
setTimeout(() => {
unsubscribe(); // Отписка произойдёт, но обработчик уже мог быть вызван
}, 5000);

Инициализация при первом изменении видимой области

editorApi.events.subscribeOnce('viewportChange', async (payload) => {
console.log('Сначала загрузить видимый контент');
await loadVisibleContent(payload.viewport);
});

Очистка ресурсов с явной отпиской

const unsubscribe = editorApi.events.subscribeOnce('documentChange', (payload) => {
console.log('Первое изменение');
});

// Если через 10 секунд событие не произойдёт, отписаться
setTimeout(() => {
unsubscribe();
console.log('Подписка отменена вручную');
}, 10000);

See

  • EditorEventCallback — типизация обработчика
  • EventId — доступные события
  • on — для постоянной подписки
  • Unsubscribe — функция отписки от слежения за событием