2013-09-16 8 views
12

Używam Codemirror v3.16 i staram się dowiedzieć, jak mogę zabić instancję mojego codemirror? Zasadniczo codemirror wystrzeliwuje, gdy tekst otworzy się w modalu na mojej stronie. Zamykając ten mod, muszę zabić instancję, inaczej gdy ponownie otworzę modal, otrzymam dwa textareas.Jak zabić instancję CodeMirror?

Czy ktoś może pomóc?

Odpowiedz

8

Jeśli instancja CodeMirror została utworzona za pomocą CodeMirror.fromTextArea, można użyć jej metody toTextArea, aby skopiować bieżącą zawartość do jej "zwierciadlanego" obszaru tekstowego i usunąć instancję.

Zakładając instancji CM ma identyfikator „CMEditor”:

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

Naprzemiennie można instancję instancji CM poza modalnym, i po prostu ukryć i pokazać go, gdy modalne otwiera.

7

Gdy CodeMirror zostanie usunięty z DOM (i zabijesz wszystkie istniejące odniesienia do tego, że JavaScript może być trzymany), będzie to śmieci usunięte. Nie ma wyraźnej metody "zabijania", po prostu przestaje się do niej odnosić.

+0

Chrome pamięci profiler byłoby lubię się z tobą nie zgadzać. Odwołania węzłów DOM utworzone przez zamknięcia nie znikną w sposób magiczny tylko dlatego, że te węzły zostały usunięte z DOM. Jeśli CodeMirror przechowuje swoje wystąpienia w globalnym obiekcie CodeMirror, masz wycieki pamięci. – user2867288

+1

Co nie jest, więc naprawdę nie wiem o czym tu mówisz. – Marijn

+0

Moja sprawa to aplikacja jednostronicowa, w której stale tworzysz i niszcz elementy tekstowe CodeMirror. Chcesz to zrobić? https://jsfiddle.net/7zvnyagq/ – user2867288

4

Wersja 5.3 lub 05/2015 Aktualizacja

CM = document.getElementById('CMEditor'); 

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

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

odpowiedzi powyżej tylko pracy dla WP na szczycie textarea, które nie zawsze tak jest. To jest lepsze:

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

Nie zapewnia to odpowiedzi na pytanie. Aby skrytykować lub poprosić o wyjaśnienie od autora, pozostaw komentarz pod swoim postem. - [Z recenzji] (/ opinia/niskiej jakości-posts/10681153) – GAMITG

+2

huh? OP zapytał "w jaki sposób mogę zabić instancję mojego codemirror" i pokazałem kod, żeby to zrobić – kofifus

1

Dodałem powyższego kodu podczas modalna jest zamknięta, ale mówi, że --- cmeditor.toTextArea nie jest funkcją

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

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