2011-01-13 3 views
3

Эй, я использую JQuery, Ajax и CKEditor:JQuery, Ajax и CKEditor - как "отвязать" экземпляр CKEditor

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

В первый раз, когда страница загружается через Аякс ckeditor() обжигают от Без промедления. Второй раз он терпит неудачу. Обычно при связывании вы делаете что-то вроде:

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

Что делать, чтобы отвязать ckeditor()?

ответ

3

Вы можете получить ссылку на объект CKEditor с помощью:

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

, а затем вы можете Destory это следующим образом:

CKEDITOR.remove(editor); 
+0

Но если экземпляр не существует, он вызывает ошибку. Можно ли проверить действительные экземпляры перед вызовом ckeditorGet()? – emachine

+0

Самый простой способ обернуть этот вызов в блок try-catch. – Variant

+0

Но если вы хотите глубже погрузиться в нее, вы можете посмотреть коллекцию CKEDITOR.instances и посмотреть, определен ли ваш редактор там. – Variant

2

Я сделал это длинный путь :). Вы можете считать количество экземпляров CK таким образом:

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

Лучшее, что я нашел это ...

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

Простой способ Получить экземпляры по имени, если существуют, то удалить:

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

ИЛИ

var editor = CKEDITOR.instances['name']; 
    if (editor) { 
     CKEDITOR.remove(editor); 
    } 
Смежные вопросы