我正在使用 Codemirror v3.16,并且试图弄清楚如何杀死我的 codemirror 实例?基本上,当我页面上的文本区域以模式打开时,codemirror 会触发。关闭这个模态,我需要杀死实例,否则当我重新打开模态时,我得到两个文本区域。
任何人都可以帮忙吗?
我正在使用 Codemirror v3.16,并且试图弄清楚如何杀死我的 codemirror 实例?基本上,当我页面上的文本区域以模式打开时,codemirror 会触发。关闭这个模态,我需要杀死实例,否则当我重新打开模态时,我得到两个文本区域。
任何人都可以帮忙吗?
如果 CodeMirror 实例是使用 创建的CodeMirror.fromTextArea
,您可以使用其toTextArea
方法将当前内容复制到其“镜像”文本区域并删除该实例。
假设您的 CM 实例的 id 为“CMEditor”:
CM = document.getElementById('CMEditor');
CM.CodeMirror.toTextArea();
或者,您可以在模式之外实例化 CM 实例,并在模式打开时隐藏和显示它。
当从 DOM 中删除 CodeMirror 时(并且您杀死了 JavaScript 可能持有的所有对它的现有引用),它将被垃圾收集。没有明确的“杀死”方法,您只需停止引用它即可。
上面的答案仅适用于 textarea 之上的 CM,但并非总是如此。这个更好:
cm.setOption("mode", "text/x-csrc");
cm.getWrapperElement().parentNode.removeChild(cm.getWrapperElement());
cm=null;
版本 5.3 或 05/2015 更新
CM = document.getElementById('CMEditor');
CM.CodeMirror.toTextArea(); // is not working
CM.toTextArea(); // is making the magic happen
我已经添加了上面的代码以在模式关闭时运行,但它说 --- cmeditor.toTextArea 不是一个函数
$("body").on("hidden.bs.modal", ".modal", function()
{
$(this).removeData("bs.modal");
cmeditor = document.getElementById("email_template_text");
cmeditor.toTextArea();
});