CKEditor编辑器实例.lang是未定义的?

时间:2012-02-22 21:08:09

标签: ckeditor

您好我正在尝试对CKEDITOR 3.6.2的实施进行一些更改

删除链接对话框目标选项卡中显示的链接目标类型下拉列表中的所有2个选项。

我尝试使用API​​实现这一点但是我在此行的dialog()方法中的缩小的核心ckeditor.js文件中出现错误X = S.lang.dir;其中S是编辑。

编辑器实例的.lang属性在执行CKEDITOR.dialog(编辑器,'链接')时是未定义的,当查看调试“编辑器”对象时我没有看到lang对象,所以我不确定为什么会缺少这个?我没有使用我们最初的实现,但据我所知,我们只添加了2个插件而没有更改ckeditor核心。

这是我的代码:

for (var i in CKEDITOR.instances) {
    var editor = CKEDITOR.instances[i];
    var dialogObj = CKEDITOR.dialog(editor, 'link');
    var linkDialogTargetField = dialogObj.getContentElement('target', 'linkTargetType');
    // API didn't seem to have a more efficient approach than clearing all and re-adding the one we want
    linkDialogTargetField.clear();
    linkDialogTargetField.add('notSet', '<not set>');
    linkDialogTargetField.add('_blank', 'New Window (_blank)');
}

通过执行以下操作,我成功地在不使用API​​的情况下进行了更改:

CKEDITOR.on('dialogDefinition', function (ev) {
    // Take the dialog name and its definition from the event
    // data.
    var dialogName = ev.data.name;
    var dialogDefinition = ev.data.definition;

    // Check if the definition is from the dialog we're
    // interested on (the "Link" dialog).
    if (dialogName == 'link') {
        // Get a reference to the "Link target" tab.
        var targetTab = dialogDefinition.getContents('target');

        var targetField = targetTab.get('linkTargetType');
        // removing everything except the 1st (none set) & 3rd (new window) options from the dropdown
        targetField['items'].splice(1, 2);
        targetField['items'].splice(2, 3); // the array is reduced by splice, so we have to splice from [2] onwards not from [4]
    }
});

但我不喜欢这种做法,有没有人有任何想法?或使用API​​实现相同结果的其他方法?

1 个答案:

答案 0 :(得分:0)

使用第二种方法并覆盖下拉项而不是拼接。