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

CKEDITOR将html插入小部件部件部件不会初始化嵌套小部件,ckeditor,ckeditor4.x,Ckeditor,Ckeditor4.x,我有一个小部件,允许用户在小部件的对话框中粘贴html 在小部件的data(evt)event方法中,我随后调用evt.sender.parts.content.setHtml(content) 这对于普通html来说很好,但是如果html包含应该变成小部件的元素,这些元素就不会被初始化 我尝试调用evt.sender.editor.widgets.checkWidgets(),但这似乎没有任何作用。特别是,从未调用任何upcast方法 我还尝试获取内容部分的范围,以便可以使用editor.in

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

在小部件的
data(evt)
event方法中,我随后调用
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
方法


有什么建议可以解决这个问题吗?

我在键入问题时就想出来了

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

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

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