2017-08-28 47 views
0

我有一個小部件,我允許用戶在小部件的對話框中粘貼html。CKEDITOR將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方法。

任何建議如何處理這個?

回答

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; 
});