CKEditor:每次加载对话框时添加元素

时间:2014-07-01 23:07:26

标签: javascript dialog ckeditor

每次打开对话框窗口时,我都需要在对话框窗口中添加不同数量的元素。这是我的代码:

CKEDITOR.on( 'dialogDefinition', function(ev) {
    var dialogName = ev.data.name;
    var dialogDefinition = ev.data.definition;

    if ( dialogName == 'myCustomDialog' ) {

        dialogDefinition.onShow = function() {
            var dialogContents = this.definition.getContents('info');
            var genericElement = 
            {
                type : 'text',
                id : 'generic',
                label : 'Some Label',
            };

            var editorData = this.getParentEditor().getData();

            for (var i = 0; i < someFunction(editorData); i++) {
                var newElement = genericElement;
                newElement['id'] += '-' + (i + 1); // "generic-1", "generic-2", etc.
                dialogContents.add(newElement);
            };

            // console.log(this.definition.getContents('info'));
        };  
    }
});

someFunction的作用并不重要,只是添加的对话框元素的数量取决于打开对话框窗口时编辑器的数据。

元素正被添加到对话框定义中,但更改在某种程度上不会反映在对话框窗口中。

如果我将dialogDefinition.onShow = function() {...}的代码放在该函数之外(对变量定义稍作修改),则会添加元素,但只是第一次加载对话框窗口时。

任何提示?

1 个答案:

答案 0 :(得分:0)

我最终在对话框定义的内容部分添加了所有元素(知道我想要显示的元素数量最多)。在onShow处理程序内部,我循环遍历更改其css display属性的元素,就像这样

$(".cke_dialog_ui_vbox > table > tbody > tr:nth-child(" + i + ")")
    .css('display', 'none');

.css('display', 'initial')显示以前隐藏的元素。