2011-04-14 2 views
1

Пожалуйста, помогите мне - мне нужно выполнить полную повторную инициализацию CKeditor. Я не хочу повторять инициализацию экземпляров CKeditor, но я хочу полностью перезагрузить его. Есть ли способ его реализовать? Я попытался сделал следующий:Как выполнить полную инициализацию CKEditor?

delete window.CKEDITOR; 

, а затем:

//clear for old sources 
    $('script[src*="/includes/contentEditor/ckeditor/"]').each(function() { 
     $(this).remove(); 
    }); 
    $('link[href*="/includes/contentEditor/ckeditor/"]').each(function() { 
     $(this).remove(); 
    }); 

    //load CKeditor again 
    contentEditor.loadjscssfile('/includes/contentEditor/ckeditor/ckeditor.js', 'js'); 
    contentEditor.loadjscssfile('/includes/contentEditor/ckeditor/adapters/jquery.js', 'js'); 

Мой метод загружает редактор, но некоторые плагины не работает после перезагрузки. Спасибо за любую помощь!

ответ

0

AlfonsoML Я использую CKeditor для динамического редактирования различных частей сайта. Когда я нажимаю на какую-то область сайта, он показывает всплывающее окно с CKeditor с содержимым этой области над этой областью. Когда я его сохраняю, я уничтожаю экземпляр этого редактора, но если во время редактирования я использую плагин ссылки, CKeditor не может отображать редактор без обновления страницы. Chrome говорит - Uncaught TypeError: не может вызвать метод «split» undefined, Mozilla - x.config.skin не определен (я пытаюсь установить config.skin, и он показывает другую ошибку - z не определено).

Я надеюсь, что полный перезапуск может помочь.

P.S. Извините, я могу найти, как ответить на ваш комментарий ...

+0

Образцы ajax.html и div_replace.html показывают, как можно создавать и уничтожать экземпляры CKEditor без необходимости «полной повторной инициализации», поэтому вы должны проверить, как вы используете CKEditor, чтобы исправить эту ошибку вместо добавления странного обходного пути , – AlfonsoML

5

У меня есть плагины, и мне не нужно полностью повторно инициализировать CKEditor, просто экземпляры, вы делаете это правильно?

Чтобы удалить мой экземпляр (мое текстовое поле ссылаются ID txt_postMsg):

$('#btn_cancelPost').click(function(){ 
    CKEDITOR.remove(CKEDITOR.instances.txt_postMsg); 
    $('#txt_postMsg').remove(); 
    $('#cke_txt_postMsg').remove(); 
}); 

Затем я вновь создать текстовое поле, и после 50мса таймаута я снова вызвать конструктор с текстовым полем, плагиных перезагружать отлично , У нас есть довольно сложные плагины для редактирования флеш/изображений, поэтому, возможно, есть проблема с вашим плагином?

2

Моя версия:

$$("textarea._cke").each(function(Z) { 
    if (typeof(CKEDITOR.instances[Z.id]) == 'undefined') { 
     CKEDITOR.replace(Z.id, { customConfig : "yourconfig.js"}); 
    } else { 
     CKEDITOR.instances[Z.id].destroy(true); 
     CKEDITOR.replace(Z.id, { customConfig : "yourconfig.js"}); 
    } 
}); 
1

попробовать что-то вроде

for(var instanceName in CKEDITOR.instances) 
    CKEDITOR.remove(CKEDITOR.instances[instanceName]);   
CKEDITOR.replaceAll(); 
0

Я искал способ повторной инициализации редактора и единственное решение, которое я в конечном итоге это удалить экземпляр и создать новый идентификатор.

Вот мой код.

var editor = 'myeditor' 
var instance = CKEDITOR.instances[editor]; 

if(typeof instance != 'undefined') 
{ 
    instance.destroy(); 
    $(".cke_editor_" + editor).remove(); 

    //make a new id 
    editor = (Math.random().toString(36).substr(2, 10);); 
} 

CKEDITOR.replace(editor, 
{ 
} 

Это не идеальный вариант, но он работает.

Надеюсь, это поможет.

Смежные вопросы