我正在使用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