我通过CKEDITOR.instances [editorId] .insertHtml()(在角应用内)添加自定义小部件, 我需要对小部件选择做出反应,可能会取消选择。
我看到该窗口小部件会触发选择,取消选择,焦点和模糊等事件,但我无法找到如何在每个窗口小部件上设置侦听器。
这可以在插件的初始化函数内完成吗?
由于
答案 0 :(得分: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;
} );
对于大多数情况,这两种方法都可以。如果你期望有大量的小部件,首先可能会消耗更多的内存:D。
顺便说一句。小部件可以是focused和selected。不同之处在于可以同时选择多个小部件,而只有一个小部件可以被聚焦(然后它具有蓝色轮廓)。在大多数情况下,您会对焦点小部件感兴趣。