如何在CKEditor中侦听小部件选择?

时间:2014-12-11 15:54:05

标签: javascript angularjs ckeditor

我通过CKEDITOR.instances [editorId] .insertHtml()(在角应用内)添加自定义小部件, 我需要对小部件选择做出反应,可能会取消选择。

我看到该窗口小部件会触发选择,取消选择,焦点和模糊等事件,但我无法找到如何在每个窗口小部件上设置侦听器。

这可以在插件的初始化函数内完成吗?

由于

1 个答案:

答案 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。

顺便说一句。小部件可以是focusedselected。不同之处在于可以同时选择多个小部件,而只有一个小部件可以被聚焦(然后它具有蓝色轮廓)。在大多数情况下,您会对焦点小部件感兴趣。