2013-09-16 13 views
12

Sto usando Codemirror v3.16 e sto cercando di capire come posso uccidere un'istanza del mio codemirror? Fondamentalmente, codemirror si attiva quando una textarea si apre in una modale sulla mia pagina. Chiudendo questa modale, ho bisogno di uccidere l'istanza, altrimenti quando riaprirò il modale, ottengo due textareas.Come uccidere un'istanza di CodeMirror?

Qualcuno può aiutare?

risposta

8

Se l'istanza CodeMirror è stata creata con CodeMirror.fromTextArea, è possibile utilizzare il suo metodo toTextArea per copiare il contenuto corrente nella sua area di testo "speculare" e rimuovere l'istanza.

Supponendo che l'istanza CM ha l'id di "CMEditor":

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

In alternativa, è possibile creare un'istanza per l'istanza CM di fuori del modali, e solo nascondere e mostrare quando si apre la modale.

7

Quando CodeMirror viene rimosso dal DOM (e si eliminano tutti i riferimenti esistenti che JavaScript potrebbe contenere), questo verrà raccolto automaticamente. Non esiste un metodo di "uccisione" esplicito, basta semplicemente fare riferimento ad esso.

+0

profiler di memoria di Chrome sarebbe piace essere in disaccordo con te. I riferimenti al nodo DOM creati dalle chiusure non scompaiono magicamente solo perché quei nodi sono stati rimossi dal DOM. Se CodeMirror memorizza le sue istanze nell'oggetto CodeMirror globale, si verificano perdite di memoria. – user2867288

+1

Quale non è, quindi davvero non so di cosa stai parlando qui. – Marijn

+0

Il mio caso è un'applicazione di una pagina in cui si creano e si distruggono costantemente le aree di testo CodeMirror. Stai dicendo che questo dovrebbe fare? https://jsfiddle.net/7zvnyagq/ – user2867288

4

La versione 5.3 o 05/2015 Aggiornamento

CM = document.getElementById('CMEditor'); 

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

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

risposte di cui sopra funzionano solo per CM sulla parte superiore del textarea che non è sempre il caso. Questo è meglio:

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

Questo non fornisce una risposta alla domanda. Per criticare o richiedere chiarimenti da un autore, lascia un commento sotto il loro post. - [Dalla recensione] (/ recensione/post di bassa qualità/10681153) – GAMITG

+2

eh? l'OP ha chiesto "come posso uccidere un'istanza del mio codemirror" e ho mostrato il codice per farlo – kofifus

1

ho aggiunto il codice qui sopra per eseguire quando il modal è chiuso, ma si dice che --- cmeditor.toTextArea non è una funzione

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

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