2011-01-13 2 views
3

Hey, j'utilise jquery, ajax et CKEditor:jquery, ajax et CKEditor - comment "délier" une instance de CKEditor

$('.ckeditor').ckeditor(); 

La première fois que la page est chargée par ajax la ckeditor() est décocha sans accroc. La deuxième fois, il échoue. Normalement, lorsque vous faites quelque chose comme liant:

.unbind('click').bind('click',function{...}) 

Que dois-je faire pour délier ckeditor()?

Répondre

3

Vous pouvez obtenir une référence d'objet CKEditor en utilisant:

var editor = $('.ckeditor').ckeditorGet(); 

et vous pouvez destory comme ceci:

CKEDITOR.remove(editor); 
+0

Mais si aucune instance n'existe actuellement, cela provoque une erreur. Puis-je vérifier les instances valides avant d'appeler ckeditorGet()? – emachine

+0

Le moyen le plus simple de contourner ce problème est de placer cet appel dans un bloc try-catch. – Variant

+0

Mais si vous voulez approfondir ce sujet, vous pouvez regarder la collection CKEDITOR.instances et voir si votre éditeur y est défini. – Variant

2

Je l'ai fait du chemin :). Vous pouvez compter le nombre d'instances de CK de cette façon:

function countProps(obj) { 
    var l = 0; 
    for (p in obj) l++; 
    return l; 
} 
if (countProps(CKEDITOR.instances)) { 
// to assure you have at least one instance of ckeditor 
// you may want to use more complicated checks - in my case I have only one editor 
// instance per page 
    editor = $('youreditor').ckeditorGet(); 
    CKEDITOR.remove(editor); 
} 
5

Le meilleur que j'ai trouvé est ...

if (CKEDITOR.instances['ckeditor']) { 
    CKEDITOR.remove(CKEDITOR.instances['ckeditor']); 
} 
0

façon simple Obtenez des instances par nom, si elles existent, puis retirez:

var editor = CKEDITOR.instances['name']; 
    if (editor) { 
     editor.destroy(true); 
    } 

OU

var editor = CKEDITOR.instances['name']; 
    if (editor) { 
     CKEDITOR.remove(editor); 
    }