2015-04-08 6 views
4

Я попытался распространить простой учебник по виджету (http://docs.ckeditor.com/#!/guide/widget_sdk_tutorial_1) с некоторыми событиями, но на самом деле я его не понимаю. Одна из моих целей - инициировать событие, если сфокусированное редактируемое поле (например, поле «simplebox-title») внутри виджета. Но, к сожалению, я только в состоянии слушать, если сам виджет сфокусироваться:Слушайте события виджета ckeditor

editor.widgets.add('simplebox', { 
      // definitions for 
      // button, template, etc 
      init: function() { 
       this.on('focus', function(ev){ 
        console.log('focused this'); 
       }); 
      } 
     }); 

или если данные изменились:

CKEDITOR.plugins.add('simplebox', { 
// my plugin code 
init: function (editor) {  
    editor.widgets.on('instanceCreated', function(evt) { 
     var widget = evt.data; 
     widget.on('data', function(evt){ 
      console.log("data changed"); 
     }); 
    }); 
} 
//even more code 
}); 

Как слушать редактируемые поля внутри виджетов? Еще одна проблема для меня - запустить событие, если виджет будет удален. Может быть, кто-то знает, как слушать это событие?

ответ

9

Как прослушивать редактируемые поля в виджетах?

Нет событий для редактируемых полей в виджетах. Они ведут себя как основное редактируемое, поэтому, когда вы что-то меняете, происходит событие editor#change.

Еще одна проблема для меня - запустить событие, если виджет удален.

Есть событие widget#destroy, но вы не найдете его очень полезным. Причина в том, что виджеты не всегда уничтожаются при их удалении, потому что есть много способов сделать это.

Если вы нажали backspace при наличии выбранного виджета, тогда да - это событие уволено, потому что удаление производится непосредственно в виджетах. Однако он запускается после удаления виджета.

Если вы выберете все содержимое редактора и нажмите backspace, тогда браузер удалит его, потому что браузер обрабатывает этот ключ в этом случае. Поэтому CKEditor реализует небольшой сборщик мусора, который время от времени проверяет, какие экземпляры виджета были удалены и уничтожили их. Вы можете увеличить частоту, позвонив по телефону editor.widgets.checkWidgtes() чаще - например. на editor#change, но ничего не изменит. В обоих случаях событие запускается после удаления виджета.

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