Как настроить CKEditor для нескольких экземпляров с разной высотой?

Я хотел бы иметь несколько экземпляров CKEditor на основе одних и тех же настроек конфигурации, но с разной высотой. Я попытался настроить configс высотой по умолчанию, настроить 1-й экземпляр, затем переопределить высоту и настроить 2-й экземпляр:

var config = {
    .....
    height:'400'
};

$('#editor1').ckeditor(config);
config.height = '100';
$('#editor2').ckeditor(config);

... но я получаю два экземпляра CKEditor, оба имеют высоту 100 пикселей. .

Я также пробовал это:

CKEDITOR.replace('editor2',{
    height: '100'
});

... Я получил сообщение об ошибке, что экземпляр уже существует. Я немного поискал и нашел, что кто-то в похожей ситуации получил совет, что вы должны уничтожить () экземпляр перед заменой (), но это кажется слишком сложным, чтобы просто установить другую начальную высоту.

В итоге я настроил два разных конфига и скопировал свойство toolbar_Full:

var config1 = {
    height:'400',
    startupOutlineBlocks:true,
    scayt_autoStartup:true,
    toolbar_Full:[
        { name: 'clipboard', items : [ 'Cut','Copy','Paste','PasteText','PasteFromWord','-','Undo','Redo' ] },
        { name: 'editing', items : [ 'Find','Replace','-' ] },
        { name: 'basicstyles', items : [ 'Bold','Italic','Underline','Strike','Subscript','Superscript','-','RemoveFormat' ] },
        { name: 'paragraph', items : [ 'NumberedList','BulletedList','-','Outdent','Indent','-','Blockquote','-','JustifyLeft','JustifyCenter','JustifyRight','JustifyBlock','-','BidiLtr','BidiRtl' ] },
        '/',
        { name: 'links', items : [ 'Link','Unlink','Anchor' ] },
        { name: 'insert', items : [ 'Image','HorizontalRule' ] },
        { name: 'styles', items : [ 'Styles','Format','Font','FontSize' ] },
        { name: 'colors', items : [ 'TextColor','BGColor' ] },
        { name: 'tools', items : [ 'Maximize', 'ShowBlocks' ] },
        { name: 'document', items : [ 'Source' ] }
    ]
}

var config2 = {
    height:'100',
    startupOutlineBlocks:true,
    scayt_autoStartup:true
};
config2.toolbar_Full = config1.toolbar_Full;

$('#editor1').ckeditor(config1);
$('#editor2').ckeditor(config2);

Есть ли лучший способ? Что-то я пропустил? Есть этот вопрос, но они не опубликовали достаточно, чтобы быть полезными, и на этот очень похожий вопроснет ответа. Спасибо!

Обновление:

Это похоже на причуду обработки времени/конфигурации CKEditor — конфигурация читается и применяется позже (я предполагаю, что после того, как структура DOM редактора была настроена), а не когда редактор первый экземпляр.

Таким образом, любые изменения в настройках конфигурации, сделанные сразу послесоздания первого редактора с .ckeditor() фактически применяютсяредактором в какой-то момент в течение следующих нескольких миллисекунд. Я бы сказал, что это ненормальное поведение или логика.

Например, вы можете получить ожидаемое поведение в моем первом примере (переопределение свойства config.heightпосле создания экземпляра первого редактора), задержав второй экземпляр CKEditor с помощью setTimeout(). Firefox потребовалось ~ 100 мс, IE потребовалось 1 мс. Дурацкая и неправильная.

CKEditor должен считывать настройки конфигурации при первом запуске каждого редактора. На данный момент каждый должен работать над этой причудой.

12
задан Community 23 May 2017 в 12:32
поделиться