如何创建多个编辑器,类名称为

时间:2019-07-05 12:29:46

标签: ckeditor5

我尝试创建多个ckeditors classic。 问题是我不知道会有多少。所以我通过className初始化它们。 这样可以初始化编辑器并开始工作,但是不要通过ajax发送任何内容。因此,当我尝试更新textarea时,因为window.editor被覆盖,所以我只能发送最后一个编辑器。 然后,我尝试将其存储在数组中,但是我无法传递neditor值,因为它的a然后在for循环完成时执行,因此neditor始终为2。 我该如何运作?我不明白诺言 谢谢!

import ClassicEditor from './ckeditor5-build-classic';

var allEditors = document.querySelectorAll('.usarCkeditor');//i have 2 editors in that case
for (var neditores = 0; neditores < allEditors.length; neditores++) {
    ClassicEditor.create(allEditors[neditores])
        .then(editor => {
            window.editor = editor;//window.editor is alway the last editor
        })
        .catch(err => {
            console.error(err.stack);
        });
}

这是其他版本:

for (var neditores = 0; neditores < allEditors.length; neditores++) {
    window["editor" + neditores] = 'paco';
    ClassicEditor.create(document.querySelector('#' + allEditors[neditores].attributes.id.value))
        .then(editor => {
            console.log(editor);
            window["editor" + neditores] = editor;
            console.log(neditores);//always 2 so it overwrites the array

        })
        .catch(err => {
            console.error(err.stack);
        });
}

//window.editor -> [0] = 'paco';[1] = 'paco';[2]= ckeditor

1 个答案:

答案 0 :(得分:0)

请注意,querySelectorAll返回的是HTMLNodeList,而不是数组。

如果您要使用类来初始化多个元素的编辑器,则可以使用这种方式进行操作。对编辑器实例的所有引用将存储在window.editors对象中。

window.editors = {};

document.querySelectorAll( '.editor' ).forEach( ( node, index ) => {
    ClassicEditor
        .create( node, {} )
        .then( newEditor => {
            window.editors[ index ] = newEditor 
        } );
} );

这是一个有效的示例:https://codepen.io/msamsel/pen/pXONjB?editors=1010