2010-08-10 34 views

Respuesta

1

He revisado los documentos de la API, pero solo pude encontrar el evento cargado.

No sé si existe una propiedad específica para esto - ¡podría haberlo! - pero podría usar el evento cargado para establecer un indicador global. No es realmente agradable, pero haría el trabajo.

// At the top of the script 
CKEDitor_loaded = false; 

// then later 
CKEDITOR.on('loaded', function(){ CKEditor_loaded = true; }); 

En lugar de una variable global, también se podría considerar el establecimiento de algo dentro CKEDITOR:

CKEDITOR.flag_loaded = true; 

Esto sería un poco más limpia.

+0

¿Y cómo descargo todas las instancias? – friedkiwi

+0

@Yvan No tengo idea. ¿Por qué necesitas hacer eso? –

+0

porque si accidentalmente cargo uno dos veces, mi página se corrompe y necesita actualizarse. Como mi aplicación es completamente AJAX, eso no es bueno. – friedkiwi

24

El evento loaded no funcionó para mí. instanceReady trabajaron:

CKEDitor_loaded = false; 

CKEDITOR.on('instanceReady', function(){ CKEditor_loaded = true; }); 
+3

Todavía no hay CKEDITOR, entonces ¿cómo puedo detectarlo? ¿No dispara nada cuando está listo? –

+0

¿Puedes intentar ponerlo en JS violín? –

+0

Si la ventana activara un "ckeditorReady", todo sería feliz. Olvidé mencionar que lo estoy cargando a pedido a través de ajax (en una etiqueta padre con un actualizador PrototypeJS). Sería complicado pegar todo eso, pero lo que hace es esto: cuando el actualizador finaliza (onComplete) se inicializa y se inicializa. Y en la inicialización del niño relevante he hecho esto: http://jsfiddle.net/yzxWv/2/ –

0

Sé que esto es un post muy antiguo, pero en mi investigación que seguía apareciendo. Estoy cargando dinámicamente CKEditor a través de jQuery. No quería cargarlo varias veces porque las cosas comienzan a suceder, como descubriste.

solución simple:

if (!window.CKEDITOR) { 
    // (not loaded yet, your code to load it) 
} 
3
var waitCKEDITOR = setInterval(function() { 
    if (window.CKEDITOR) { 
     clearInterval(waitCKEDITOR); 
     //CKEDITOR.replace(...); 
    } 
}, 100/*milli*/); 
0

Espero que esto ayude a alguien.

También cargo un fragmento de página con la funcionalidad de CKEDITOR a través de AJAX y, como tal, he experimentado muchos de los problemas descritos en esta pregunta. Esta es mi solución:

function setCk(id){ 
if(window.CKEDITOR){ 
    var _instId = CKEDITOR.instances[id]; 
    if(_instId == undefined){ 
     CKEDITOR.inline(id); 
    }else{ 
     CKEDITOR.instances[id].destroy(); 
     CKEDITOR.inline(id); 
    } 
} 

}

En cada respuesta AJAX para este fragmento me inyecto un elemento de secuencia de comandos en la cabeza con una llamada a setCk (textareaId). El truco es destruir cualquier instancia previa de CKEDITOR para el ID de destino & reiniciar CKEDITOR después de cada carga de fragmento de AJAX.

Cuestiones relacionadas