Edytor Codemirror nie ładuje zawartości do momentu kliknięcia

Używam codemirror 2 i działa dobrze, z wyjątkiem tego, że ustawiona wartość edytora nie ładuje się do edytora, dopóki nie kliknę edytora i nie stanie się skupiony.

Chcę, aby edytor pokazywał swoją zawartość bez konieczności klikania. Jakieś pomysły?

Wszystkie dema codemirror działają zgodnie z oczekiwaniami, więc pomyślałem, że może textarea nie jest skupiona, więc też próbowałem.

$("#editor").focus();
var editor =    CodeMirror.fromTextArea(document.getElementById("editor"), {
                    mode: "text/html",
                    height: "197px",
                    lineNumbers: true
                });
Author: Karl, 2011-12-02

11 answers

Musisz wywołać refresh () po SetValue (). Jednak, musisz użyć setTimeout, aby odłożyć odświeżanie() do momentu, gdy CodeMirror/Browser zaktualizuje układ zgodnie z nową zawartością:

this.codeMirrorInstance.setValue(content);
var that = this;
setTimeout(function() {
    that.codeMirrorInstance.refresh();
},1);
Dla mnie działa dobrze. Odpowiedź znalazłem w tutaj .
 38
Author: nvd_ai,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2013-11-14 06:04:37

Spodziewam się, że ty (lub jakiś skrypt, który załadowałeś) mieszasz się z DOM w taki sposób, że Edytor jest ukryty lub w inny sposób w dziwnej pozycji podczas tworzenia. Wymaga wywołania swojej metody refresh() po jej uwidocznieniu.

 26
Author: Marijn,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2011-12-02 08:21:04

Na wszelki wypadek i dla wszystkich, którzy nie czytają dokumentacji wystarczająco uważnie (jak ja), ale potykają się o to. Do tego jest autorefresh addon.

Musisz dodać autorefresh.js do swojego pliku. Teraz możesz go używać w ten sposób.

var editor = CodeMirror.fromTextArea(document.getElementById("id_commentsHint"), {
  mode: "javascript",
  autoRefresh:true,
  lineNumbers: false,
  lineWrapping: true,

});
Działa jak urok.
 13
Author: Vikash Saini,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2018-07-24 12:40:16

Zdarza mi się używać CodeMirror w zakładce bootstrap. Podejrzewałem, że zakładki bootstrap były tym, co uniemożliwiało wyświetlanie go do momentu kliknięcia. Naprawiłem to, po prostu wywołując metodę refresh() na pokazie.

var cmInstance = CodeMirror.fromTextArea(document.getElementById('cm'), {
    lineNumbers: true,
    lineWrapping: true,
    indentUnit: 4,
    mode: 'css'
});

// to fix code mirror not showing up until clicked
$(document).on('shown.bs.tab', 'a[data-toggle="tab"]', function() {
    this.refresh();
}.bind(cmInstance));
 6
Author: Yes Barry,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2016-11-12 23:50:40

Coś mi zadziałało.

$(document).ready(function(){
                var editor = CodeMirror.fromTextArea(document.getElementById("code2"), {
                     //lineNumbers: true,
                      readOnly: true,
                      autofocus: true,
                     matchBrackets: true,
                     styleActiveLine: true
                 });
                 setTimeout(function() {
                     editor.refresh();
                    }, 100);

        });
 5
Author: Jinu,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2015-12-11 05:25:13

Wersja 5.14.2 codemirror rozwiązuje to w pełni za pomocą dodatku. Zobacz Ta odpowiedź Po szczegóły.

 2
Author: Paul Whipp,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-05-23 11:47:11

Jeszcze innym rozwiązaniem (które również zdałem sobie sprawę, ponieważ edytor musiał być widoczny, aby utworzyć poprawnie) jest tymczasowe dołączenie elementu nadrzędnego do elementu body podczas budowy, a następnie ponowne podłączenie po zakończeniu.

W ten sposób nie musisz mieszać się w elementy ani martwić się o widoczność w istniejących hierarchiach, które mogą być zakopane przez twój edytor.

W moim przypadku, dla processr.com , mam wiele zagnieżdżonych elementów edycji kodu, z których wszystkie muszą być tworzone w locie, jak użytkownik robi aktualizacje, więc robię następujące:

this.$elements.appendTo('body');
for (var i = 0; i < data.length; i++)
{
    this.addElement(data[i]);
}
this.$elements.appendTo(this.$view);
Działa świetnie i do tej pory nie było widocznego migotania.
 1
Author: davestewart,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2014-03-19 09:41:35

Coś mi się udało! :)

      var sh = setInterval(function() {
       agentConfigEditor.refresh();
      }, 500); 

      setTimeout(function(){
        clearInterval(sh);  
      },2000)
 1
Author: cnwangzd,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2015-12-20 05:46:38

Spróbuj wywołać focus na elemencie DOM zamiast obiektu jQuery.

var editor=$( '#editor' );
editor[0].focus();
// or
document.getElementById( 'editor' ).focus();
 0
Author: czarchaic,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2011-12-02 02:57:55

Właśnie natknąłem się na wersję tego problemu dziś wieczorem.

Wiele innych postów uważa widoczność rodzica textarea za ważną, jeśli jest ukryta, możesz napotkać ten problem.

W mojej sytuacji sama forma i najbliższe otoczenie były w porządku, ale mój menedżer widoku szkieletowego wyżej w łańcuchu renderowania był problemem.

Mój element widoku nie jest umieszczony na DOM, dopóki Widok Nie wyrenderuje się w pełni, więc domyślam się, że element nie jest na DOM jest uważany za ukryty lub po prostu nie obsługiwany.

Aby to obejść dodałem fazę Post-render (pseudocode):

view.render();
$('body').html(view.el);
view.postRender();

W postrenderze Widok może zrobić to, czego potrzebuje wiedząc, że cała zawartość jest teraz widoczna na ekranie, tutaj przeniosłem CodeMirror i działało dobrze.

Może to również wyjaśnić, dlaczego można napotkać problemy z takimi rzeczami, jak wyskakujące okienka, ponieważ w niektórych przypadkach mogą próbować zbudować całą zawartość przed wyświetlanie.

Mam nadzieję, że to komuś pomoże.

Toby

 0
Author: Toby Skinner,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2013-06-21 23:55:25
<div class="tabbable-line">
    <ul class="nav nav-tabs">
        <li class="active">
            <a href="#tabXml1" data-toggle="tab" aria-expanded="true">Xml 1</a>
        </li>
        <li class="">
            <a href="#tabXml2" id="xmlTab2Header" data-toggle="tab" aria-expanded="true">Xml 2</a>
        </li>
    </ul>
    <div class="tab-content">
        <div class="tab-pane active" id="tabXml1">
            <textarea id="txtXml1" />
        </div>
        <div class="tab-pane" id="tabXml2">
            <textarea id="txtXml2" />
        </div>
    </div>
</div>

<link rel="stylesheet" href="~/Content/codemirror.min.css">
<style type="text/css">
    .CodeMirror {
        border: 1px solid #eee;
        max-width: 100%;
        height: 400px;
    }
</style>

<script src="~/Scripts/codemirror.min.js"></script>
<script src="~/Scripts/codemirror.xml.min.js"></script>
<script>
        $(document).ready(function () {
            var cmXml1;
            var cmXml2;
            cmXml1 = CodeMirror.fromTextArea(document.getElementById("txtXml1"), {
                mode: "xml",
                lineNumbers: true
            });
            cmXml2 = CodeMirror.fromTextArea(document.getElementById("txtXml2"), {
                mode: "xml",
                lineNumbers: true
            });
            // Refresh code mirror element when tab header is clicked.
            $("#xmlTab2Header").click(function () {
                setTimeout(function () {
                    cmXml2.refresh();
                }, 10);
            });
        });
</script>
 0
Author: Koray Bayram,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2015-12-11 13:15:25