Ckeditor 5 несколько экземпляров

Я хочу динамически инициализировать ckeditors, а затем использовать функцию setData() для каждого из них. Я пробовал это: CKEditor 5 — получить экземпляры редактора, но я получаю сообщение об ошибке :

Невозможно прочитать свойство setData неопределенного

const editors = {}; 
function createEditor( elementId ) {
    return ClassicEditor
        .create( document.getElementById( elementId ) )
        .then( editor => {
        editors[ elementId ] = editor;
    } )
        .catch( err => console.error( err.stack ) );
}

$(document).ready( function() {
    createEditor( 'editor1' );
    createEditor( 'director1' );

    console.log(editors.editor1.setData('test')); //error message
});

Можно ли делать то, что я хочу, и если да, то что мне делать?


person Alex    schedule 27.05.2019    source источник
comment
editors['editor1'].setData('test') это работает?   -  person Orange Orange    schedule 27.05.2019
comment
@OrangeOrange такая же ошибка   -  person Alex    schedule 27.05.2019


Ответы (1)


См.: https://ckeditor.com/docs/ckeditor5/latest/api/module_core_editor_editor-Editor.html#event-ready.

Вы можете установить данные редактора только тогда, когда он полностью загружен. Несмотря на то, что есть событие ready, как вы можете прочитать по ссылке, гораздо лучше использовать промис, возвращаемый методом create. Ваш код, вероятно, должен выглядеть так:

var editors = [];   
function createEditor( elementId, data ) {
    return ClassicEditor
        .create( document.querySelector( '#' + elementId ) )
        .then( editor => {
        editors[ elementId ] = editor;
        editor.setData( data ); // You should set editor data here
    } )
        .catch( err => console.error( err ) );
}

$(document).ready( function() {
    createEditor( 'editor', 'test' );
    createEditor( 'director1', 'test' );
});
person j.swiderski    schedule 10.06.2019