18

我正在使用 Codemirror v3.16,并且试图弄清楚如何杀死我的 codemirror 实例?基本上,当我页面上的文本区域以模式打开时,codemirror 会触发。关闭这个模态,我需要杀死实例,否则当我重新打开模态时,我得到两个文本区域。

任何人都可以帮忙吗?

4

5 回答 5

13

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

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

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

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

于 2013-09-16T13:27:24.700 回答
12

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

于 2013-09-19T08:58:30.283 回答
9

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

cm.setOption("mode", "text/x-csrc");
cm.getWrapperElement().parentNode.removeChild(cm.getWrapperElement());
cm=null;
于 2015-12-25T07:35:46.327 回答
5

版本 5.3 或 05/2015 更新

CM = document.getElementById('CMEditor');

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

CM.toTextArea(); // is making the magic happen
于 2015-05-21T13:19:59.360 回答
1

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

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

    cmeditor = document.getElementById("email_template_text");
    cmeditor.toTextArea();
});
于 2016-04-21T10:47:40.953 回答