Обновление
Чтобы следить за обновлениями в редакторе, зарегистрируйте обработчик для события cursorActivity
.Это событие вызывается при изменении курсора или выделения.
Обработчик вызывается с экземпляром CodeMirror;при этом вы можете вызвать метод getCursor
, чтобы получить объект, который содержит текущий номер строки, на которой активен курсор.
Обратите внимание, что номер строки равен нулюна основе, так что вы можете увеличивать или не увеличивать его на 1.
const STATUS_CURRENT_LINE = document.getElementById('line-no.');
const onCursorActivity = (instance) => {
const cursor = cm.getCursor();
STATUS_CURRENT_LINE.textContent = cursor.line + 1;
}
editor.on("cursorActivity", onCursorActivity);
Установка номера текущей строки при изменении документа в редакторе
ошибка возникает из-за того, что обратный вызов updateInfo
вызывается еще до того, как вы его зарегистрируете.Таким образом, значение, зарегистрированное в качестве обратного вызова, равно undefined
.
editor.on('change', updateInfo()) // -> editor.on('change', undefined)
. Это можно решить путем регистрации функции.
editor.on('change', updateInfo)
Однако подпись для обратного вызова должна следовать тому, что задокументировано.
Обратному вызову change
передается instance
CodeMirror и changeObject
, из которого можно получить текущую строку.
"change" (instance: CodeMirror, changeObj: object)
Запускается каждый раз, когда изменяется содержимое редактора.changeObj
- это объект {from, too, text, removed, origin}
, содержащий информацию об изменениях, произошедших в качестве второго аргумента.from
и to
- это позиции (в системе координат перед изменением), где изменение начиналось и заканчивалось (например, это может быть {ch:0, line:18}
, если позиция находится в начале строки # 19).text
- это массив строк, представляющих текст, который заменил измененный диапазон (разделенный на строку).removed
- это текст между from
и to
, который перезаписывается этим изменением.Это событие вызывается до окончания операции, прежде чем произойдет обновление DOM.
const STATUS_CURRENT_LINE = document.getElementById('line-no.');
function updateInfo(instance, changeObj){
STATUS_CURRENT_LINE.innerText = changeObj.to.line;
}
editor.on("change", updateInfo);