Как убить экземпляр CodeMirror?

Я использую Codemirror v3.16, и я пытаюсь выяснить, как я могу убить экземпляр моего codemirror? В основном codemirror срабатывает, когда текстовая область открывается в модальном режиме на моей странице. Закрывая этот модальный, мне нужно убить экземпляр, иначе, когда я снова открою модальный, я получаю два текстовых поля.

Может ли кто-нибудь помочь?

Ответ 1

Если экземпляр CodeMirror был создан с помощью CodeMirror.fromTextArea, вы можете использовать его метод toTextArea, чтобы скопировать текущее содержимое в его "зеркальную" текстовую область и удалить экземпляр.

Предполагая, что ваш экземпляр CM имеет идентификатор "CMEditor":

CM = document.getElementById('CMEditor');
CM.CodeMirror.toTextArea();

В качестве альтернативы вы можете создать экземпляр экземпляра CM вне модальности и просто скрыть его и показать его, когда модальный файл открывается.

Ответ 2

Когда CodeMirror удаляется из DOM (и вы удаляете все существующие ссылки на него, которые могут храниться в JavaScript), это будет сбор мусора. Нет явного метода "kill", вы просто перестаете ссылаться на него.

Ответ 3

Ответы выше работают только для CM поверх textarea, что не всегда так. Это лучше:

cm.setOption("mode", "text/x-csrc");
cm.getWrapperElement().parentNode.removeChild(cm.getWrapperElement());
cm=null;

Ответ 4

Обновление версии 5.3 или 05/2015

CM = document.getElementById('CMEditor');

CM.CodeMirror.toTextArea(); // is not working 

CM.toTextArea(); // is making the magic happen

Ответ 5

Я добавил указанный выше код для запуска, когда модаль закрыт, но он говорит, что --- cmeditor.toTextArea не является функцией

$("body").on("hidden.bs.modal", ".modal", function()
{
    $(this).removeData("bs.modal");

    cmeditor = document.getElementById("email_template_text");
    cmeditor.toTextArea();
});