2013-09-16 11 views
12

Ich benutze Codemirror v3.16 und ich versuche herauszufinden, wie ich eine Instanz meines Codemirrors töten kann? Grundsätzlich wird Codemirror ausgelöst, wenn sich ein Textfeld in einem Modal auf meiner Seite öffnet. Wenn ich dieses Modal schließe, muss ich die Instanz beenden. Wenn ich das Modal wieder öffne, erhalte ich zwei Textareas.Wie kann ich eine CodeMirror-Instanz beenden?

Kann jemand helfen?

Antwort

8

Wenn die CodeMirror-Instanz mit CodeMirror.fromTextArea erstellt wurde, können Sie mit der Methode toTextArea den aktuellen Inhalt in den gespiegelten Textbereich kopieren und die Instanz entfernen.

Angenommen, Ihre CM-Instanz die ID „CMEditor“ hat:

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

Alternativ können Sie die CM-Instanz außerhalb des modal, instanziiert und nur verstecken und es zeigen, wenn die modale öffnet.

7

Wenn CodeMirror aus dem DOM entfernt wird (und Sie alle vorhandenen Verweise darauf abbrechen, die JavaScript möglicherweise enthält), wird Garbage Collection durchgeführt. Es gibt keine explizite "Kill" -Methode, Sie hören einfach auf, sich darauf zu beziehen.

+0

Chrome Speicher-Profiler würde ich stimme dir nicht zu. Von Closures erstellte DOM-Knotenverweise verschwinden nicht auf magische Weise, nur weil diese Knoten aus dem DOM entfernt wurden. Wenn CodeMirror seine Instanzen im globalen CodeMirror-Objekt speichert, haben Sie Speicherlecks. – user2867288

+1

Was es nicht tut, also weiß ich wirklich nicht worüber du hier sprichst. – Marijn

+0

Mein Fall ist eine einseitige Anwendung, wo Sie CodeMirror Textareas ständig erstellen und zerstören. Willst du sagen, das würde tun? https://jsfiddle.net/7zvnyagq/ – user2867288

4

Die Version 5.3 oder 05/2015 aktualisiert

CM = document.getElementById('CMEditor'); 

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

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

Antworten oben nur Arbeit für CM auf dem Textbereiches, die nicht immer der Fall ist. Das ist besser:

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

Dies bietet keine Antwort auf die Frage. Um einen Autor zu kritisieren oder um Klärung zu bitten, hinterlasse einen Kommentar unter seinem Beitrag. - [Aus Bewertung] (/ review/low-quality-posts/10681153) – GAMITG

+2

huh? Das OP fragte, "wie ich eine Instanz meines Codemirrors töten kann", und ich habe Code gezeigt, um genau das zu tun – kofifus

1

Ich habe den obigen Code hinzugefügt laufen, wenn die modale geschlossen ist, aber sie sagt, dass --- cmeditor.toTextArea ist keine Funktion

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

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