ViewState API: личное состояние блока
Личное состояние блока, которое принадлежит этому браузеру, а не документу. Переключатель хранит здесь, открыт ли он, под ключом 'open'. Внутри инструмента это api.viewState.
Значения хранятся как JSON в localStorage под id документа. Они не сохраняются в документе и не уходят участникам совместной работы. Запись, которую не меняли 90 дней, удаляется.
Без localStorage значения живут в памяти только этой вкладки.
Как получить экземпляр редактора
Методы ниже вызываются на редакторе, созданном через new Blok(). Они доступны после того, как разрешится editor.isReady.
// 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');Методы
viewState.get(blockId, key)
unknownЗначение блока под ключом key в этом браузере или undefined, если его нет.
const open = editor.viewState.get(blockId, 'open') === true;viewState.set(blockId, key, value)
voidСохраняет значение блока в этом браузере. Значение должно укладываться в JSON. Работает в режиме только для чтения и не попадает в историю отмены.
editor.viewState.set(blockId, 'open', true);viewState.onChange(blockId, key, listener)
() => voidВызывает listener с новым значением, когда его меняет эта вкладка или другая вкладка этого браузера с тем же документом. Возвращает функцию отписки.
const unsubscribe = editor.viewState.onChange(blockId, 'open', (value) => {
setOpen(value === true);
});
// Later
unsubscribe();viewState.isCreatedHere(blockId)
booleantrue для блока, который эта вкладка создала после отрисовки документа: из меню блоков, сочетанием клавиш, вставкой, преобразованием или разделением. false для блоков из сохранённого документа, из другой вкладки, от участника совместной работы, а также после отмены и повтора. Помогает открыть новый блок для того, кто его создал.
// In a block tool
constructor({ api, block }) {
this.api = api;
this.block = block;
}
rendered() {
const { viewState } = this.api;
const id = this.block.id;
if (viewState.get(id, 'open') === undefined && viewState.isCreatedHere(id)) {
viewState.set(id, 'open', true);
}
}