我尝试创建多个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
答案 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