Я использую CKEditor 4 для текстовой области, хранящейся на странице. Когда я открываю данные, которые я редактирую, формируя сетку на своей странице, я помещаю функцию setData() для установки содержимого внутри текстовой области внутри события on instanceReady, но иногда это не так. не вхожу в функцию события instanceReady. Это мой js-код:
function prepCkEditor() {
var oFCKeditor = CKEDITOR.instances.EMAIL_DESC_TEMPLATETextBox;
if (!oFCKeditor) {
CKEDITOR.replace('EMAIL_DESC_TEMPLATETextBox', {
language: editorlang,
toolbar: 'helpsi',
skin: 'moono',
scayt_autoStartup: CONFIGURAZIONE.enableSpellCheck,
scayt_sLang: $('#hfUSER_LANGEXTENDED').val().replace('-', '_'),
scayt_disableOptionsStorage: 'lang'
});
}
}
prepCkEditor();
var oFCKeditor = CKEDITOR.instances.EMAIL_DESC_TEMPLATETextBox;
if (oFCKeditor) {
console.info(oFCKeditor.status);
oFCKeditor.on('instanceReady', function () {
oFCKeditor.setData(template.TemplateBody);
});
}
Оператор console.info, помещенный перед строкой on instanceReady, печатает «готово», поэтому кажется, что редактор полностью загружен, но он не входит в функцию для установки данных. В чем может быть проблема?
Если я проверю отладку в инструментах разработки браузера, она будет работать, но выводимый статус будет выгружен.



![Безумие обратных вызовов в javascript [JS]](https://i.imgur.com/WsjO6zJb.png)


Это потому, что иногда он готов, а иногда нет к тому времени, когда вы доберетесь до этой строки кода.
Вам следует прикрепить событие при создании экземпляра, используя свойство on.
function prepCkEditor() {
var oFCKeditor = CKEDITOR.instances.EMAIL_DESC_TEMPLATETextBox;
if (!oFCKeditor) {
CKEDITOR.replace('EMAIL_DESC_TEMPLATETextBox', {
language: editorlang,
toolbar: 'helpsi',
skin: 'moono',
scayt_autoStartup: CONFIGURAZIONE.enableSpellCheck,
scayt_sLang: $('#hfUSER_LANGEXTENDED').val().replace('-', '_'),
scayt_disableOptionsStorage: 'lang',
on: {
instanceReady: function () {
console.info(oFCKeditor.status);
oFCKeditor.setData(template.TemplateBody);
}
}
});
}
}
Спасибо, я думаю, это может быть решением, как мне передать данные внутри редактора? Я попробовал таким образом
function prepCkEditor(data) {
var oFCKeditor = CKEDITOR.instances.EMAIL_DESC_TEMPLATETextBox;
if (!oFCKeditor) {
var editTemplateBody = CKEDITOR.replace('EMAIL_DESC_TEMPLATETextBox',
{
language: editorlang,
toolbar: 'helpsi',
skin: 'moono',
scayt_autoStartup: CONFIGURAZIONE.enableSpellCheck,
scayt_sLang: $('#hfUSER_LANGEXTENDED').val().replace('-', '_'),
scayt_disableOptionsStorage: 'lang',
on: {
instanceReady: function (event) {
this.setData(data);
}
}
});
}
}
Но когда я отлаживаю внутри события on instanceReady, переменная данных пуста, даже если я передаю текст внутри параметра данных в функцию.
Обновлено: Проблема с текстом, не вставленным в редактор, была связана с другим вызовом, который перекрывал этот вызов для сброса редактора, я удалил первый вызов, спасибо