我有一个 Javascript 混乱,超出了我对该语言的了解。
我正在为 CKEditor 创建一个自定义插件。该插件是一个 IFrame,在 CKEditor 生成的 DIV 中打开。
在 IFrame 中,我显示了许多图像。如果用户选择了这些图像之一,则显示该图像所需的 HTML 代码将插入到 CKEditor 中。
动态地这样做是我卡住的地方。我从 Iframe 中连接到 CKEditor 实例,如下所示:
var CKEDITOR = window.parent.CKEDITOR;
CKEditor 提供了一个“OK 侦听器”,当单击 OK 按钮(由 CKEEditor 呈现)时触发。OK 侦听器在 IFrame 之外。
定义使用静态值的 OK 侦听器有效:
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);
但是当我分配 OK 侦听器时,我还不知道我的返回值,所以我需要做这样的事情:
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);
但这不起作用,因为my_dynamic_value
它在被 CKEditor 的“确定”按钮触发时超出了函数的范围。
我当然可以,每次用户在列表中选择不同的图像时,更新okListener
函数并将当前值硬编码eval
到其中。但这对我来说是一种可怕的资源浪费。
我可以使用一些范围技巧,以便我可以从 okListener() 中访问我的 iframe 中的内容吗?
我希望这足够清楚。如果不是,请发表评论,我会澄清。