Перейти к содержимому
ФреймворкJavaScript

Read-only API: включение и выключение правки

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

Тогда тот же экземпляр редактора меняет режим и сохраняет позицию курсора, историю отмен и прокрутку. Поэтому переключатель «редактирование/просмотр» это readOnly.set(!isEditing) на ОДНОМ экземпляре, а не уничтожение одного редактора и создание другого.

Проверка работает по принципу «всё или ничего». Достаточно установить один блочный инструмент без setReadOnly, и КАЖДОЕ переключение уходит на запасной путь: сохранение, очистка, повторный рендер. Этот путь пересоздаёт все экземпляры блоков и не восстанавливает курсор. Прокрутка при этом восстанавливается, а история отмен намеренно остаётся нетронутой.

Обновлено 8 сент. 2026 г.Редактировать на GitHub

Как получить экземпляр редактора

Методы ниже вызываются на редакторе, созданном через new Blok(). Они доступны после того, как разрешится editor.isReady.

TypeScript
// You already hold the instance returned by the constructor.
const editor = new Blok({ holder: 'editor' });
await editor.isReady;

// Call any API method on it.
editor.caret.setToLastBlock('end');

Методы

readOnly.set(state, options?)

Promise<boolean>

Устанавливает режим только для чтения в указанное булево состояние. Переключение происходит на месте, без уничтожения и пересоздания: экземпляры блоков, позиция курсора, история отмен и прокрутка сохраняются.

Это работает, только если каждый зарегистрированный блочный инструмент реализует setReadOnly(state) в своём прототипе. Проверка идёт по принципу «всё или ничего».

Один инструмент без него отправляет КАЖДОЕ переключение на запасной путь: сохранение, очистка, повторный рендер (у всех встроенных инструментов он есть, у стороннего может не быть). Этот путь пересоздаёт все экземпляры блоков и не восстанавливает курсор, но прокрутка и история отмен всё же сохраняются.

Передайте { hideControls: true }, чтобы заодно скрыть hover-панель инструментов, настройки блока и строчную панель инструментов, пока активен режим только для чтения. Опция записывает объектную форму config.readOnly, поэтому живое состояние её отражает. Возвращает новое состояние.

Когда использовать

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

Параметры

ПараметрТипОбязательныйПо умолчаниюОписание
statebooleanОбязательный—

Устанавливаемое состояние режима только для чтения.

options.hideControlsboolean—unchanged (inherits the current `config.readOnly`)

Скрывает все элементы управления редактора (hover-панель инструментов, поповер настроек блока, строчную панель инструментов), пока активен режим только для чтения.

Значение «липкое». set() пишет config.readOnly, только когда вы передаёте настоящее булево значение, поэтому без этой опции сохраняется текущее значение hideControls: из конфигурации конструктора или из более раннего вызова set().

Передайте { hideControls: false } явно, чтобы вернуть элементы управления. false действует только тогда, когда config.readOnly ни разу не задавали в объектной форме.

TypeScript
// The edit/view toggle: ONE instance, flipped in place —
// caret, undo history and scroll survive the switch
await editor.readOnly.set(!isEditing);

// Enable read-only and hide all controls
// (hover toolbar, block settings, inline toolbar)
await editor.readOnly.set(true, { hideControls: true });

// Check state
console.log(editor.readOnly.isEnabled); // true or false
console.log(editor.readOnly.togglesInPlace); // true

readOnly.toggle(state?)

Promise<boolean>Устарело

Переключает состояние режима только для чтения. Без параметра переключает текущее состояние. С параметром устанавливает указанное состояние.

Используйте вместо: readOnly.set

Когда использовать

Оставлен для совместимости. Без параметра переключает текущее состояние.

TypeScript
// Toggle current state
const isReadOnly = await editor.readOnly.toggle();

// Enable read-only
await editor.readOnly.toggle(true);

// Disable read-only
await editor.readOnly.toggle(false);

Свойства

СвойствоТипОписание
isEnabledboolean

Текущее состояние режима только для чтения

togglesInPlacetrue

Маркер уровня сборки, жёстко равный true. Он говорит, что в этой сборке Blok есть путь переключения на месте вместо постоянного пересоздания редактора.

Это не проба возможностей. Он не сообщает, подходит ли под этот путь текущий набор установленных инструментов. Для этого пути нужно, чтобы каждый блочный инструмент реализовал setReadOnly, и нигде это не публикуется.

Используйте маркер только чтобы определить сборку Blok настолько старую, что переключения на месте в ней ещё нет.

TypeScript
// The edit/view toggle: one instance, one call.
// Caret, undo history and scroll survive the switch —
// no destroy-and-recreate.
async function setEditing(isEditing: boolean) {
  await editor.readOnly.set(!isEditing);
}

// Framework adapters do this for you: change the readOnly
// prop (React/Vue) or input (Angular) and the adapter calls
// readOnly.set on the existing instance — same editor identity.