2014-01-03 4 views
1

У меня есть CKEditor плагин, как это:Как удалить обработчик событий, уничтожая CKEditor

CKEDITOR.plugins.add('testplugin', { 
     init: function (editor) { 
       editor.on('contentDom', function (e) {     
        var body = editor.document.getBody();   
        body.on('mouseup', function (e) { 
         alert('run!!!!'); 
        }); 
        }); 
     }); 
}); 

Он отработан в CKEditor версии 3 (IFrame база)

Но когда я обновление до CKEditor версии 4 (lastest - contenteditable base),

все события огонь несколько раз, когда я уничтожаю, а затем перезапускать ckeditor.

(с использованием CKEDITOR.instants.testEditor.destroy() и CKEDITOR.replace('testEditor',options);)

я использую: removeAllListeners() удалить все обработчики событий тела, но без изменений.

Как я могу завершить уничтожение CKEDITOR 4 + Все прослушиватели событий на нем?

ответ

3

Кажется, что вы используете встроенный экземпляр, поэтому editor.document - CKEDITOR.document. Это означает, что каждый отдельный экземпляр имеет то же самое var body = editor.document.getBody();.

Чтобы избежать дублированных событий как пережиток прикрепленного от «мертвых редакторов», вы должны либо слушать editor#destroy и вызвать event#removeListener на каждом один, или использовать editable#attachListener, которая автоматизирует эту работу для вас (jsFiddle):

editor.on('contentDom', function() {         
    var body = editor.document.getBody(); 

    // This listener will be deactivated once editor dies. 
    editor.editable().attachListener(body, 'mouseup', function() { 
     console.log('run!!!!'); 
    }); 
}); 
+0

безупречный! 'editor.editable()' сохранить мою жизнь :) спасибо. –

+0

Спасибо @oleq, ваш пример очень помог мне. У меня была ошибка «Невозможно прочитать свойство checkFeature» неопределенного «после того, как я уничтожил свой CKEditor, если у меня был прослушиватель событий. Метод removeAllListeners не помог. – Eugene

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