tinyMCE setContent - динамически (jQuery) добавляется текстовая область - PullRequest
1 голос
/ 01 февраля 2012

У меня есть несколько полей, перечисленных на моей странице, у каждого есть кнопка, которая создает текстовую область, которая должна быть преобразована в tinyMCE, и содержимое должно быть обновлено строкой из запроса ajax. Как это:

$("table td.bio-td").delegate(".btn", "click", function() {
     ...         
     var id = this.id;
     $('#cont').html('<textarea id="mceeditor_'+id'">xyz</textarea>');
     tinymce.EditorManager.execCommand('mceAddControl',true, 'mceeditor_'+id);
     tinymce.activeEditor.setContent(ajax_str);
     ...
});

Код работает правильно, за исключением одной вещи: строка setContent (). Я получаю сообщение об ошибке в консоли javascript, что activeEditor имеет значение null. Каким-то образом tinyMCE не может найти редактор в DOM? Тогда как он конвертировался в объект tinymce раньше?

Ответы [ 4 ]

3 голосов
/ 01 февраля 2012

Попробуйте сделать:


tinymce.get('your_textarea_id').focus();
tinymce.activeEditor.setContent(ajax_str);

Надеюсь, это поможет

2 голосов
/ 18 июня 2014

У меня была такая же проблема.

Переместить tinymce.init в конец страницы.

Используйте $('#terms').val('ssssss'), чтобы обновить textarea при успешном выполнении ajax.

После обновления textarea он преобразуется в редактор.

2 голосов
/ 01 февраля 2012

Самый простой способ -

tinymce.get('mceeditor_'+id).setContent(ajax_str);
1 голос
/ 07 февраля 2012

Я наткнулся на ту же проблему.

Я использую вкладки пользовательского интерфейса Jquery (библиотека jquery ui), и в каждой вкладке, которую я динамически создаю, я пытаюсь инициализировать экземпляр tinyMCE для textarea в каждойвкладка.Каждый раз, когда вы нажимаете кнопку, на сервер делается ajax-запрос для получения информации, а обработчик javascript создает новую вкладку с информацией.

Проблема, которая возникает, заключается в том, что при обратном вызове, когда сервервозвращается с ответом в вашем обработчике обратного вызова, если вы выполните следующий вызов в том же потоке

tinyMCE.execCommand("mceAddControl",false, "my_element" + elementid);
tinyMCE.get("my_element" + elementid).setContent("hello world!");

"tinyMCE.get (..)" вернет ноль.

Появляетсячто новый элемент управления mce, который вы добавляете, завершает свое создание только после того, как полностью завершится выполнение функции обработчика обратного вызова.

Поэтому вам нужно будет вызвать это:

tinyMCE.get("my_element" + elementid).setContent("hello world!");

Где-то еще,позже (по событию, вызванному впоследствии).

Обновление (Редактирование):

Так что я рассказал вам все это без реального тестирования.Но, наконец, у меня есть, и я подтверждаю, что это то, что происходит.Я сделал не очень красивый хак, где я использую таймер для запуска через 100 миллисекунд, например:

tinyMCEHack_timer = setTimeout("finish_setting_mce_content()",100);

В идеале вы захотите найти событие получше, чем это.

Вам также нужно будет найти способ передать данные из вашего обработчика обратного вызова ajax в ваш обработчик обратного вызова таймера.Опять же, это не красиво, но я использовал глобальную переменную (переменная, область действия которой - вся страница).

Удачи!

...