如何杀死CodeMirror实例?

时间:2013-09-16 12:57:06

标签: javascript codemirror

我正在使用Codemirror v3.16,我正在试图弄清楚如何杀死我的代码镜像实例?基本上,当textarea在我的页面上的模态中打开时,会触发codemirror。关闭这个模态,我需要杀死实例,否则当我重新打开模态时,我得到两个textareas。

有人可以帮忙吗?

5 个答案:

答案 0 :(得分:9)

如果CodeMirror实例是使用CodeMirror.fromTextArea创建的,则可以使用其toTextArea方法将当前内容复制到其“镜像”文本区域并删除实例。

假设您的CM实例的ID为“CMEditor”:

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

或者,您可以在模态之外实例化CM实例,只需在模态打开时隐藏并显示它。

答案 1 :(得分:8)

当从DOM中删除CodeMirror(并且你杀死了JavaScript可能持有的所有对它的现有引用)时,它将被垃圾收集。没有明确的“杀戮”方法,你只是停止引用它。

答案 2 :(得分:6)

上面的答案仅适用于textarea顶部的CM,但并非总是如此。这样更好:

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

答案 3 :(得分:4)

版本5.3或05/2015更新

CM = document.getElementById('CMEditor');

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

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

答案 4 :(得分:1)

我已经添加了上面的代码,以便在关闭模式时运行,但是它表示--- cmeditor.toTextArea不是函数

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

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