Javascript 图像对话框&x2014;扩展onOk,而不是完全覆盖

Javascript 图像对话框&x2014;扩展onOk,而不是完全覆盖,javascript,ckeditor,Javascript,Ckeditor,我发现我可以通过以下方法连接到onOk: editor.on('dialogShow', function (ev) { var name = ev.data.getName(); var definition = ev.data.definition; if (name == 'image') { definition.onOk = function(e) { console.log( e );

我发现我可以通过以下方法连接到
onOk

editor.on('dialogShow', function (ev)
{
    var name = ev.data.getName();
    var definition = ev.data.definition;

    if (name == 'image')
    {
        definition.onOk = function(e)
        {
            console.log( e );
        };
    }
});
真棒,除非现在删除默认行为,导致没有图像添加到CK内容

检查一下,我不想破坏默认提供的74行功能

我的目标是在图像被附加后通过回调运行它


复制/粘贴、修改是保留和扩展功能的唯一方法,还是有其他方法?

maximkou解决方案的小改进:

var oldImplementation = definition.onOk;
definition.onOk = function(e)
{
    oldImplementation(e);
    console.log( e );
};
var oldImplementation = definition.onOk;
definition.onOk = function( e ) {
    oldImplementation.apply( this, [].slice.call( arguments ) );
    console.log( e );
};
这个解决方案还可以,而且是最干净的

更新:我找到了一个更好的解决方案-我刚刚了解了一个事件:)。因此,您不需要更改对话框的定义-您可以像这样绑定事件侦听器:

editor.on('dialogShow', function ( evt ) {
    if ( evt.data.getName() == 'image' ) {
        var listener = evt.data.on( 'ok', function() {
            console.log( 'ok!' );
        } );

        // We need to remove that listener, to avoid duplicating it on
        // next dialogShow.
        evt.data.on( 'hide', function() {
            listener.removeListener();
        } );
    }
} );

我以前也尝试过类似的方法(
oI(e)
oI.call(e)
),但我遇到了错误。
oI.call(e)
将像
e.oI()
一样工作。但是您想调用旧的
onOk
方法,因为它是原始
定义
对象的属性。@Reinmar感谢您的更新。
editor
来自哪里?I根据使用
CKEDITOR.on('dialogDefinition',function(ev){if(ev.data.name=='link'){//…}})重载对话框
但是没有
编辑器
,显然我不能使用
CKEDITOR
。这就是为什么我使用
ev.data.definition.dialog.on('show',function(evt){this.on('ok',function(){//…})})
,但它似乎比原始的
'onOk()'
编辑器有另一个上下文(this)来自任何你想要的地方:)。例如,您可以使用
CKEDITOR.instances
对象或从
CKEDITOR.replace/inline
返回的值。请注意,我的回答解释了为一个特定的编辑器而不是全局添加此行为的方法<代码>CKEDITOR#对话框定义对象是全局对象。