CKEDITOR将html插入小部件部分不会初始化嵌套小部件

时间:2017-08-28 11:17:47

标签: ckeditor ckeditor4.x

我有一个小部件,我允许用户在小部件的对话框中粘贴html。

在小部件的data(evt)事件方法中,我然后调用evt.sender.parts.content.setHtml(content);

这适用于普通的html,但是如果html包含应该变成小部件的元素,则这些元素不会被初始化。

我试过调用evt.sender.editor.widgets.checkWidgets();,但这似乎没有做任何事情。特别是没有调用upcast方法。

我还尝试获取内容部分的范围,以便我可以使用editor.insertHtml,但无法在dom.Element对象中的任何位置找到范围。

然后我尝试使用evt.sender.parts.content.setHtml(evt.sender.editor.dataProcessor.toHtml(content, 'a'));。这会调用upcast方法,但由于某种原因,从不调用init方法。

有任何建议如何处理?

1 个答案:

答案 0 :(得分:0)

我在输入问题时想出来......

您必须先调用evt.sender.parts.content.setHtml(evt.sender.editor.dataProcessor.toHtml(content, 'a'));来处理html,然后调用evt.sender.editor.widgets.checkWidgets();以使用未初始化的小部件处理创建的html。

为了防止使用其他递归小部件的无限循环,对checkWidgets()的调用应该在setTimeout中完成。 IE:

if (!checkingNewWidgets)
    checkingNewWidgets = setTimeout(function() {
       t.editor.widgets.checkWidgets();
       checkingNewWidgets = 0;
});