我正在使用Codemirror v3.16,我试图弄清楚如何杀死我的codemirror的实例?基本上,当textarea在我的页面上以模态打开时,会触发codemirror。关闭这个模式,我需要杀死实例,否则当我重新打开模式时,我会得到两个textareas。如何杀死一个CodeMirror实例?
任何人都可以帮忙吗?
我正在使用Codemirror v3.16,我试图弄清楚如何杀死我的codemirror的实例?基本上,当textarea在我的页面上以模态打开时,会触发codemirror。关闭这个模式,我需要杀死实例,否则当我重新打开模式时,我会得到两个textareas。如何杀死一个CodeMirror实例?
任何人都可以帮忙吗?
如果CodeMirror实例是使用CodeMirror.fromTextArea
创建的,则可以使用其toTextArea
方法将当前内容复制到其“镜像”文本区域并删除该实例。
假设你的CM实例具有“CMEditor”的ID:
CM = document.getElementById('CMEditor');
CM.CodeMirror.toTextArea();
或者,那么你可以用CM实例的模式之外,只是隐藏和模态打开时表现出来。
当从DOM中删除CodeMirror(并且杀死JavaScript可能持有的所有现有引用时),它将被垃圾收集。没有明确的'杀死'方法,你只需停止引用它。
版本5.3或更新05/2015
CM = document.getElementById('CMEditor');
CM.CodeMirror.toTextArea(); // is not working
CM.toTextArea(); // is making the magic happen
解答以上仅适用于文本区域的顶部CM工作,这是情况并非总是如此。这是更好的:
cm.setOption("mode", "text/x-csrc");
cm.getWrapperElement().parentNode.removeChild(cm.getWrapperElement());
cm=null;
我已经添加了上面的代码,当模式是封闭运行,但它说--- cmeditor.toTextArea不是一个函数
$("body").on("hidden.bs.modal", ".modal", function()
{
$(this).removeData("bs.modal");
cmeditor = document.getElementById("email_template_text");
cmeditor.toTextArea();
});
Chrome的内存分析器会喜欢不同意你。由闭包创建的DOM节点引用不会因为这些节点已从DOM中删除而奇迹般地消失。如果CodeMirror将其实例存储在全局CodeMirror对象中,则存在内存泄漏。 – user2867288
它没有,所以我真的不知道你在说什么。 – Marijn
我的情况是一个单页应用程序,您不断创建和销毁CodeMirror textareas。你是说这样做吗? https://jsfiddle.net/7zvnyagq/ – user2867288