CKEditor插件关闭编辑器

时间:2010-12-31 00:33:37

标签: javascript ckeditor

从插件中销毁编辑器的问题是,某些代码试图在破坏性插件代码之后使用编辑器,而实际上编辑器不再存在,导致错误和不稳定。

我已经为插件提出了以下代码,该插件使用async:true和setTimeout来关闭编辑器:

 var cancelAddCmd =
 {
  modes : { wysiwyg:1, source:1 },
  async: true,
  exec : function( editor )
  {
   if(confirm('Are you sure you want to cancel editing and discard all content?')) setTimeout(function() { editor.destroy(); }, 100);
  }
 };

我看到的问题是它使用了一个狡猾的setTimout调用,根据计算机的执行速度可能会产生混合结果 - 在破坏编辑器的时候可能还没有超过100毫秒。

是否有正确的方法可以在插件中销毁编辑器?即使使用async:true;并且没有创建setTimeout错误。

如果可能的话,可能的解决办法是阻止任何与编辑器相关的现有/更多代码在之后运行吗?


我尝试过使用事件,比如on('afterCommandExec',function(){editor.destroy();})和其他一些事件,但这没有多大帮助...似乎没有当编辑器跳出堆栈调用以处理按钮时的事件。

并且没有办法通过更恰当地处理CKEditor实例来停止执行?

2 个答案:

答案 0 :(得分:1)

如果我是正确的,您希望关闭CKEditor,但可能会或可能不会运行某些需要先完成的进程。

您应该做的是当您尝试使用CKEditor时,首先检查它是否仍然存在。如果没有,只需停止执行该功能。您还可以延迟销毁编辑器,例如将布尔值设置为false,然后再销毁它们。

答案 1 :(得分:1)

显然setTimeout是可以接受的,因为没有办法在JS中停止代码执行,就像PHP' die()一样。