CKEditor:如何在模糊时销毁实例?

时间:2011-09-20 13:06:04

标签: javascript javascript-events ckeditor

我有一个单独的html页面,上面有多个div元素。每次用户点击div时,它都会被动态替换为CKEditor

$('.editable').click(function() {
    editor = CKEDITOR.replace(this);
});

现在,如果CKEditor实例失去焦点(模糊事件),我需要通过ajax将内容发布到单独的脚本(如果有更改)并销毁此实例:

$('.editable').click(function() {
    editor = CKEDITOR.replace(this);
    editor.on('blur', function(e)
    {
        if (e.editor.checkDirty())
           // get data with e.editor.getData() and do some ajax magic 

        e.editor.destroy();
    });
});

但是这个例子不起作用,因为我不知道为什么会在destory()之前调用checkDirty()。我怎样才能使这个工作?

1 个答案:

答案 0 :(得分:0)

如果将destroy()放在if()声明中,该怎么办?如果没有任何改变,你可以有一个调用destroy的else子句。如果某些内容发生了变化,您可以在数据传输完成后在if子句中调用destroy()

$('.editable').click(function() {
  editor = CKEDITOR.replace(this);
  editor.on('blur', function(e)
  {
    if (e.editor.checkDirty()) {
       // get data with e.editor.getData() and do some ajax magic
       if ( dataTransferComplete ) {
         e.editor.destroy();
       }

     } else {
       e.editor.destroy();
     }
  });
});

或者您可以在调用destroy()之前检查变量。在数据传输完成后将该变量设置为true,并在else子句中,在检查更改并传输任何更新数据之前,不会调用destroy()

$('.editable').click(function() {
  editor = CKEDITOR.replace(this);
  editor.on('blur', function(e)
  {
    var okToDestroy = false;

    if (e.editor.checkDirty()) {
       // get data with e.editor.getData() and do some ajax magic
       okToDestroy = true;
     } else {
       okToDestroy = true;
     }

    if (okToDestroy )
      e.editor.destroy();

  });
});

这是一个大纲,我没有测试过代码,但是如果显示了这个概念。

好吧,