2014-12-11 2 views
1

Я добавляю пользовательский виджет через CKEDITOR.instances [editorId] .insertHtml() (внутри углового приложения), , и мне нужно отреагировать на выбор виджета, возможно, отменить выбор.Как прослушивать выбор виджета в CKEditor?

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

Это можно сделать внутри функции init плагина?

Thanks

ответ

7

Вы можете прямо или косвенно слушать это.

Прямой слушатель должен будет использовать widget.repository#instanceCreated событие, чтобы иметь возможность слушать widget#blur события на всех созданных виджетов:

editor.widgets.on('instanceCreated', function(evt) { 
    var widget = evt.data; 

    // You can check at this point whether you want to observe this kind of widget 
    // e.g. check widget.name. 

    widget.on('blur', function() { 
     // Fired when widget is deselected. 
    }); 
}); 

Косвенный метод будет использовать editor#selectionChange событие наблюдать изменения выбора и widget.repository.focused имущества проверьте, какой виджет теперь выбран (или нет):

var lastFocused = null; 

editor.on('selectionChange', function() { 
    if (lastFocused && lastFocused !== editor.widgets.focused) { 
     // The lastFocused widget just lost focus. 
    } 

    lastFocused = editor.widgets.focused; 
}); 

Оба метода подходят для большинства случаев. Сначала можно потреблять немного больше памяти, если вы ожидаете bazillion виджетов: D.

BTW. Виджет может быть как focused, так и selected. Разница заключается в том, что одновременно можно выбирать несколько виджетов, в то время как только один может быть сфокусирован (тогда у него есть синий контур). В большинстве случаев вас будет интересовать сфокусированный виджет.

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