Je suis victime d'un kerfuffle Javascript qui va au-delà de ma connaissance de la langue.Portée variable du gestionnaire d'événements externes
Je crée un plugin personnalisé pour CKEditor. Le plugin est un IFrame qui s'ouvre dans un DIV généré par CKEditor.
A l'intérieur du IFrame, je suis l'affichage d'un certain nombre d'images. Si l'utilisateur sélectionne l'une de ces images, le code HTML nécessaire pour afficher cette image est inséré dans le CKEditor.
font c'est là Dynamiquement je suis coincé. Je me connecte à l'instance CKEditor à l'intérieur du Iframe comme ceci:
var CKEDITOR = window.parent.CKEDITOR;
CKEditor offre un « auditeur OK » qui se déclenche lorsque le bouton OK (rendu par ckeditor) est cliqué. Cet écouteur OK est en dehors de l'IFrame.
Définition d'un auditeur OK qui fonctionne avec des valeurs statiques fonctionne:
var okListener = function(ev) {
this._.editor.insertHtml('<img class="symbol" src="my_static_symbol.gif">');
CKEDITOR.dialog.getCurrent().removeListener("ok", okListener);
};
// Assign OK listener
CKEDITOR.dialog.getCurrent().on("ok", okListener);
Mais je ne sais pas ma valeur de retour mais quand j'attribue l'auditeur OK, donc je besoin de faire quelque chose comme ceci:
var okListener = function(ev) {
this._.editor.insertHtml('<img class="symbol" src="'+my_dynamic_value()+'">');
CKEDITOR.dialog.getCurrent().removeListener("ok", okListener);
};
// Assign OK listener
CKEDITOR.dialog.getCurrent().on("ok", okListener);
Mais cela ne fonctionne pas parce que my_dynamic_value
est en dehors de la portée de la fonction au moment où il est tiré par le bouton « OK » de CKEditor.
Je pourrais bien sûr, chaque fois que l'utilisateur sélectionne une image différente dans la liste, mettre à jour la fonction okListener
et coder en dur la valeur actuelle en utilisant eval
dedans. Mais cela ressemble à un horrible gaspillage de ressources pour moi.
Y a-t-il un truc de portée que je peux utiliser pour pouvoir accéder à des choses de mon Iframe depuis okListener()?
J'espère que cela est assez clair. Si ce n'est pas le cas, commentez et je vais clarifier.
Bonjour Pekka, pouvez-vous donner accès à un échantillon? – Diadistis
Malheureusement non, tout ce travail est exécuté localement et représenterait un énorme travail à télécharger (l'éditeur est intégré dans un gros CMS). Y a-t-il quelque chose que je puisse faire pour le rendre plus clair? –
Est-ce que 'okListener' est défini dans l'iframe ou le parent? L'iframe est-il créé/visité une seule fois, ou chaque fois que l'utilisateur a besoin de sélectionner une image? – outis