Функция CKEditor setData() не работает каждый раз

Я использую 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, печатает «готово», поэтому кажется, что редактор полностью загружен, но он не входит в функцию для установки данных. В чем может быть проблема?

Если я проверю отладку в инструментах разработки браузера, она будет работать, но выводимый статус будет выгружен.

Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
В настоящее время производительность загрузки веб-сайта имеет решающее значение не только для удобства пользователей, но и для ранжирования в...
Безумие обратных вызовов в javascript [JS]
Безумие обратных вызовов в javascript [JS]
Здравствуйте! Юный падаван 🚀. Присоединяйся ко мне, чтобы разобраться в одной из самых запутанных концепций, когда вы начинаете изучать мир...
Система управления парковками с использованием HTML, CSS и JavaScript
Система управления парковками с использованием HTML, CSS и JavaScript
Веб-сайт по управлению парковками был создан с использованием HTML, CSS и JavaScript. Это простой сайт, ничего вычурного. Основная цель -...
JavaScript Вопросы с множественным выбором и ответы
JavaScript Вопросы с множественным выбором и ответы
Если вы ищете платформу, которая предоставляет вам бесплатный тест JavaScript MCQ (Multiple Choice Questions With Answers) для оценки ваших знаний,...
0
0
61
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

Ответ принят как подходящий

Это потому, что иногда он готов, а иногда нет к тому времени, когда вы доберетесь до этой строки кода.

Вам следует прикрепить событие при создании экземпляра, используя свойство 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, переменная данных пуста, даже если я передаю текст внутри параметра данных в функцию.

Обновлено: Проблема с текстом, не вставленным в редактор, была связана с другим вызовом, который перекрывал этот вызов для сброса редактора, я удалил первый вызов, спасибо

Другие вопросы по теме