Ваш вопрос на самом деле две отдельные темы , которые необходимо согласовать, чтобы получить желаемый результат.
Как узнать, когда я могу использовать API TinyMCE?
Когда вы впервые загружаете TinyMCE, вы используете tinymce.init({})
для инициализации редактора. Это асинхронное действие и занимает некоторое время. Пока процесс init
не завершен, вы не можете использовать API-интерфейсы TinyMCE для взаимодействия с редактором для выполнения таких операций, как загрузка содержимого.
Похоже, что ваш init
вызван jQuery document.ready
событие. Отдельно вы, кажется, делаете ajax вызов для получения некоторых данных с вашего сервера. Если этот вызов ajax завершится до инициализации TinyMCE, ваша попытка вызвать setContent()
в TinyMCE не удастся, так как нет редактора, с которым можно взаимодействовать до завершения инициализации.
Лучший способ загрузить контент в редактор - использовать собственный обратный вызов редактора init и поместить туда свой код. Например:
tinymce.init({
selector: "textarea",
plugins: [
"lists link image anchor code media table contextmenu paste"
],
toolbar: "undo redo | bold italic | link image",
setup: function (editor) {
editor.on('init', function () {
editor.setContent('<p>The init function knows on which editor its called - this is for ' + editor.id + '</p>');
});
}
});
... обратите внимание, что init
вызывается для каждого редактора (если их несколько), и у вас есть доступ к объекту редактора в функции автоматически (например, editor.setContent()
) .
Вот пример выполнения загрузки через редактор init: http://fiddle.tinymce.com/gufaab/34
Как использовать API TinyMCE для загрузки контента в существующий Экземпляр TinyMCE?
Если вы пытаетесь загрузить контент в редактор во время инициализации редактора, приведенный выше пример является самым простым решением, поскольку вы автоматически получаете доступ к экземпляру редактора и можете сделать простой вызов, используя этот * 1034. * object.
Если, однако, вы хотите позже взаимодействовать с редактором, вы можете использовать метод tinymce.get()
. Согласно API get()
строка , которую вы передаете этому вызову, должна быть ID элемента редактора, а не ссылкой на класс или jQuery объекта.
https://www.tinymce.com/docs/api/class/tinymce/#get
Поэтому, если вы хотите настроить таргетинг на редактор по идентификатору, вам нужно что-то вроде этого:
<textarea class='tiny-mce' id='editor1'></textarea>
<textarea class='tiny-mce' id='editor2'></textarea>
.. и в вашем JavaScript как-то так ...
tinymce.get('editor2').setContent('...content here...');
Если у вас есть только один редактор на странице, вы также можете использовать
tinymce.activeEditor.setContent('...content here...');
... как есть только один возможный «активный» редактор. Я бы порекомендовал метод get()
, так как он явно нацелен на экземпляр редактора на основе идентификатора базового textarea
.
Обратите внимание, что ни для чего из этого не требуется / не требуется / не используется никаких методов или синтаксиса jQuery. TinyMCE не полагается на jQuery для работы любого из своих API.