Pek*_*ica 1 javascript scope ckeditor
我有一个超出我的语言知识的Javascript kerfuffle.
我正在为CKEditor创建一个自定义插件.该插件是一个IFrame,它在CKEditor生成的DIV中打开.
在IFrame中,我正在显示许多图像.如果用户选择其中一个图像,则显示该图像所需的HTML代码将插入到CKEditor中.
动态地这样做是我被困住的地方.我从iframe中连接到CKEditor实例,如下所示:
var CKEDITOR = window.parent.CKEDITOR;
Run Code Online (Sandbox Code Playgroud)
CKEditor提供了一个"OK侦听器",当单击OK按钮(由CKEDitor呈现)时,它会触发.那个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);
Run Code Online (Sandbox Code Playgroud)
但是当我分配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);
Run Code Online (Sandbox Code Playgroud)
但这不起作用,因为my_dynamic_value它在CKEditor的"OK"按钮触发时超出了函数的范围.
我当然可以,每次用户在列表中选择不同的图像时,更新okListener功能并使用硬编码当前值eval.但这对我来说是一种可怕的资源浪费.
有没有我可以使用的范围技巧,所以我可以从okListener()中的iframe访问东西?
我希望这很清楚.如果不是,请评论,我会澄清.
但这不起作用,因为my_dynamic_value在CKEditor的"OK"按钮触发时超出了函数的作用域.
好.也许它真的不起作用,但解释是错误的.在JavaScript中,变量具有词法范围.这意味着如果my_dynamic_value在声明函数(处理程序)时在范围内,那么它将永远保留在那里.您收到了什么错误消息?
| 归档时间: |
|
| 查看次数: |
2594 次 |
| 最近记录: |