2017-08-28 10 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

質問を入力中に、私はそれを考え出した...

あなたは初期化されていないウィジェットで作成したHTMLを処理するために、最初のHTMLを処理するためにevt.sender.parts.content.setHtml(evt.sender.editor.dataProcessor.toHtml(content, 'a'));evt.sender.editor.widgets.checkWidgets();を呼び出す必要があります。

他の再帰ウィジェットによる無限ループを防ぐには、checkWidgets()の呼び出しをsetTimeoutで実行する必要があります。 IE:

if (!checkingNewWidgets) 
    checkingNewWidgets = setTimeout(function() { 
     t.editor.widgets.checkWidgets(); 
     checkingNewWidgets = 0; 
}); 
関連する問題