2012-05-13 4 views
10

Ich habe eine CodeMirror-Instanz in einer Webapp eingebettet, die ich erstelle. Es funktioniert großartig - außer dass der ursprüngliche Inhalt nicht angezeigt wird, bis der Benutzer ein neues Zeichen eingibt. Es ist also alles da, bis der Benutzer eine Veränderung erzwingt. Das ist schlecht. Gibt es eine Möglichkeit, ein Repaint oder Refresh des Browsers zu erzwingen, um ein Zeichen einzugeben - Whitespace genügt. HierCodeMirror hat Inhalt, wird aber nicht angezeigt bis zum Tastendruck

ist der Code ...

<textarea id='code-mirror' ><?php echo $contents; ?></textarea> 
<script> 
    jQuery(document).ready(function(){ 
     var textarea = document.getElementById('code-mirror'); 
     var myCodeMirror = CodeMirror.fromTextArea(textarea,  
      { 
      onUpdate:codemirrorcallback, 
      }); 
     // myCodeMirror.refresh(); ? is this an option? 
    }); 
</script> 

Dieser eine Arbeits Editor produzieren, die den Inhalt speichert und zeigt die gespeicherten Inhalte in den Textbereich aber nur zeigt es, nachdem der Benutzer es Bearbeitung beginnt. Vorher ist es nur leer.

Jede Hilfe, auch nur Links würde sehr geschätzt werden. Danke Leute!

UPDATE

auf myCodeMirror Aufruf .refresh druckt einen Fehler in der Chrome-Konsole von Uncaught TypeError: Cannot call method 'focus' of undefined

Antwort

9

Sie müssen in der Tat eine refresh() auf Ihrer CodeMirror-Instanz aufrufen, wenn dies geschieht. Aber aufgrund von Platz Affen müssen Sie den Refresh-Aufruf in einem Timeout wickeln:

var editor = CodeMirror.fromTextArea(yourSourceDOM, { lineNumbers:true }) 
setTimeout(editor.refresh, 0) 

Es ist nicht schön, aber das löste es für mich.

+0

Ich hatte das gleiche Problem und das schien es zu beheben. Hast du eine Idee, warum das funktioniert? – Sarumanatee

+0

Die Space-Affen erlaubt mir nicht, die setTimeout zu verwenden. Das Entfernen hat für mich funktioniert. – Tk421

+1

Jedes Mal, wenn Sie ein 'setTimeout' oder ähnliches verwenden müssen, ist es _usual_ (in diesem Fall nicht sicher), da jemand Zalgo veröffentlicht (Mixing Sync vs Async APIs). Mehr dazu hier: http://blog.izs.me/post/59142742143/designing-apis-for-asynchrony – papercowboy

3

Verwenden Sie Code Mirror 5.14.2, wenn Sie explizit aktualisieren, müssen Sie darauf achten, es richtig aufzurufen (siehe this question), aber es ist am einfachsten mit dem Codemirror autorefresh add on geliefert.