CKEditor新实例始终未加载

4

我在我的Angular应用程序中使用CKEditor,并且每当用户访问新模型时,都会重新加载我的CKEditor实例。

我使用以下JS来初始化编辑器:

var initEditor = function() {
  $('.js-editor-wrap').html("<textarea id='editor'></textarea>");

  var editor = CKEDITOR.replace('editor', {});

  editor.on('loaded', function() {
    console.log('editor loaded');
  });

  editor.on('instanceReady', function() {
    console.log('instance ready')
  });
}

以下是摧毁编辑器的步骤:

var destroyEditor = function() {
  if (CKEDITOR.instances['editor']) {
    CKEDITOR.instances['editor'].destroy(true);
    $('#editor').off().remove();
  }
}

首次编辑器初始化工作正常,但随后的初始化会创建一个状态为“未加载”的编辑器实例,从而无法触发“已加载”或“实例准备就绪”事件。 我在控制台中没有看到任何错误。
有什么想法是什么导致了这个问题?
这绝对是类似于以下问题的问题,但不同之处足以成立自己的问题:CKEditor instance already exists

1
我猜你有一个不同的问题,因为你提供的代码每次都像你想要的那样工作(请参见此fiddle:http://jsfiddle.net/6bs3cjo8/)。所以很难说你的具体问题是什么。如果可能的话,你可以尝试通过将编辑器实例定义为全局变量来解决它(请参见这个fiddle作为示例:http://jsfiddle.net/v0rn1Low/1/)- 或者更好一点,从initEditor()返回它作为句柄,并将其传递给destroyEditor() - Jey DWork
是的,恐怕您需要编写更多的代码 - 函数调用 initEditordestroyEditor - Marek Lewandowski
1个回答

2
经过更深入的挖掘和感谢Jey Dwork提供的jsfiddle,我找到了问题所在。我的CKEditor配置文件添加了几个插件,这些插件引用了命名不正确的语言文件。由于某种原因,当这些插件一起包含时,在第二次初始化期间导致编辑器无法完全加载。
删除语言文件并在插件定义中取消对它们的引用解决了该问题。遗憾的是,这里没有触发任何错误。最终结果是圆满结束。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接