CKEditor, widget d'initialisation ajouté avec insertElement

J'ai des widgets créés, ils lors du démarrage initial ils chargent bien, mais j'ajoute plus de ce type de widget à l'éditeur:

ckeditorInstance.insertElement( CKEDITOR.dom.element.createFromHtml('<html></html>')); 

Il s'insère très bien, mais le ckeditor ne reconnaît pas l'élément inséré comme un widget, de sorte que les champs modifiables du widget ne sont pas activés comme ils le devraient.

Existe-t-il un moyen de faire en sorte que ckeditor passe une nouvelle analyse de son contenu pour initialiser les nouveaux widgets qu'il n'a pas déjà initialisés?

Formats de données

Tout d'abord – il existe une séparation pour le format de données d'un widget (comment le widget est représenté en données) et le format interne (comment il est représenté dans l'éditeur). Vous êtes peut-être familier avec les fonctions de downcast et de downcast – elles font la transition entre ces formats (la conversion automatique signifie transformer le format de données en format interne).

Travaux de mise en surbrillance et de diffusion défectueuse uniquement si la chaîne de données est traitée, mais si vous insérez du contenu à l'aide de l' editor#insertElement il n'y a pas de traitement, donc il n'y a pas de mise à jour.

Insertion

Vous avez deux solutions:

  1. Utilisez l' editor#insertHtml au lieu de l' editor#insertElement . Votre widget sera sauvegardé avant l'insertion, de sorte qu'il sera inséré dans un bon format.

  2. Prenez soin de vous-même (si nécessaire) et utilisez l' editor#insertElement .

Initialisation

C'était une première étape de la vie du widget – il doit être inséré. La seconde est à initialiser.

  1. Il y a un bug actuellement (il sera réparé dans deux semaines), que les widgets insérés par la méthode insertHtml ne sont pas initialisés. Donc, en ce moment, après avoir inséré un widget avec l' editor#insertHtml vous devez appeler:

    editor.widgets.checkWidgets()

  2. Si vous utilisez editor#insertElement vous devez prendre soin d'un widget d'initialisation. Pour faire cet appel:

    editor.widgets.initOn( element, 'widgetName' )

Dans les deux scénarios, initialisez le widget après l'avoir inséré .

Consultez l' API Widgets pour plus de détails.

Voir aussi ma réponse expliquant comment savoir si un élément est un widget et comment les insérer dans un éditeur .