2012-05-13 16 views
10

Tengo una instancia CodeMirror incrustada en una aplicación web que estoy creando. Funciona muy bien, excepto que el contenido inicial no se mostrará hasta que el usuario ingrese un nuevo carácter. Por lo tanto, está todo allí pero escondido hasta que el usuario fuerce un cambio. Esto es malo. ¿Hay alguna forma en que pueda forzar el repintado o la actualización del navegador para simular la introducción de un carácter? El espacio en blanco funcionará.CodeMirror tiene contenido pero no se mostrará hasta que presione la tecla

Aquí está el código ...

<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> 

Esta producción de un editor de trabajo que guarda el contenido y muestra el contenido guardado en el interior del área de texto, pero sólo muestra que después de que el usuario comienza a editarlo. Antes de eso, está en blanco.

Cualquier ayuda, incluso los enlaces serán muy apreciados. ¡Gracias chicos!

ACTUALIZACIÓN

Calling .Refresh en myCodeMirror está imprimiendo un error en la consola de Chrome Uncaught TypeError: Cannot call method 'focus' of undefined

Respuesta

9

De hecho, necesita llamar a refresh() en su instancia CodeMirror si esto está sucediendo. Sin embargo, debido a los monos del espacio que necesita para envolver la llamada de actualización en un tiempo de espera:

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

No es bonito, pero que lo solucionó para mí.

+0

Tuve el mismo problema y esto pareció solucionarlo. ¿Tienes una idea de por qué esto funciona? – Sarumanatee

+0

Los monos espaciales no me permiten usar el setTimeout. Eliminarlo funcionó para mí. – Tk421

+1

Cada vez que tiene que usar un 'setTimeout' o similar a" ponerlo a trabajar ", es _normalmente_ (no estoy seguro en este caso) debido a que alguien liberó Zalgo (mezcla de sincronización vs API asíncrona). Más sobre esto aquí: http://blog.izs.me/post/59142742143/designing-apis-for-asynchrony – papercowboy

3

Usando el código espejo 5.14.2, si actualiza explícitamente debe tener cuidado de invocarlo correctamente (consulte this question), pero es más fácil de manejar con la codemirror suministrada autorefresh add on.

Cuestiones relacionadas