Я знаю, что это довольно старо, но я остановился на поиске решения, поэтому думаю, что стоит опубликовать другой подход.
Я не хотел отслеживать все возможные изменения, так как большинствоактивность, которую я наблюдаю в моем виджете, - это обычное редактирование или создание виджета из внешних источников, поэтому я просто отслеживал события, которые могли бы привести к удалению:
editor.widgets.on( 'instanceCreated', function(evt) {
let widget = evt.data ;
if (widget.name === 'mywidget') {
widget.on('select', function() {
widget.on('key', function(evt) {
if ( evt.data.keyCode == 46 // Delete
|| evt.data.keyCode == 8 // Backspace
|| evt.data.keyCode == CKEDITOR.CTRL + 88 // Ctrl-X
)
jQuery(widget.element.$).myCallback() ; // callback defined as a jQuery function for the sake of simplicity
}) ;
}) ;
widget.on('deselect', function() {
widget.on('key', function(evt) {
}) ;
}) ;
}
}) ;
Конечно, обратный вызов должен предполагать, чтовиджет еще не был удален, но это является преимуществом, поскольку обычно нужны его данные.