TinyMCE отправляет пустое значение, когда я пытаюсь использовать несколько конфигураций

Я использую TinyMCE для создания редактора WYSIWYG в моем веб-приложении. Мне нужно настроить его в расширенном режиме для некоторых текстовых и в простом режиме для некоторых. Я настраиваю TinyMCE следующим образом.

<head>
    <script type="text/javascript">
        tinyMCE.init({
            mode : "textareas",
            theme : "simple",
            editor_selector : "simple"
        });

        tinyMCE.init({
            mode : "textareas",
            theme : "advanced"
        });              
    </script>
</head>

Эта конфигурация работает и показывает мне TinyMCE в простом или расширенном режиме, основанном на классе текстовой области.

Однако проблема возникает, когда я отправляю форму. Сервер получает пустое поле для текстовой области. (эта проблема не возникает, когда я использую только одну конфигурацию для TinyMCE)

Я провел некоторый поиск и наткнулся на предложение, в котором говорилось, что я должен явно попросить TinyMCE сохранить контент перед отправкой. Я попытался добавить этот код в мою форму.

$('#postFeedback').click( function(){
    tinyMCE.triggerSave(true,true);
    alert("TextArea val - " + $('input[name=email]').val() + "- " + $('textarea.simple').val());
    $('form').submit();
});

Форма действительно отправляется, но у меня та же проблема. Значение в текстовой области пустое. Я также поставил предупреждение (как показано выше), чтобы проверить значение текстовой области, и оно действительно пустое.

Несколько вопросов для начала:

  • TinyMCE отлично работает, когда у меня всего одна конфигурация (init). Тем не менее, это испортило то, что у меня есть два? Любая подсказка, почему это может произойти?
  • Обязательно ли просить TinyMCE сохранить содержимое текстовой области?
  • Как мне начать отладку этой проблемы?

1 ответ

Решение

Вы должны инициализировать ваши редакторы, используя mode: "exact", в ваших подразделениях. Затем вы можете инициализировать один экземпляр tinymce, используя

tinyMCE.execCommand('mceAddControl', false, editorid); //editorid should be the id of the textarea

и настройки ваших модулей будут применены (у меня почему-то возникло ощущение, что что-то довольно плохое, если использовать два модуля для всех редакторов tinymce (потому что, похоже, они оба вызываются для всех)).

РЕДАКТИРОВАТЬ: Чтобы иметь возможность использовать разные init вы должны вызвать mceAddControl с использованием initialization_object вместо только идентификатора редактора. Пример:

var config_tinymce_xy = {

    mode: 'exact',
    theme: "advanced",
    content_css : "my.css",
    plugins: "code,...",

    theme_advanced_buttons1 : "code,...",
    theme_advanced_buttons2 : "...",
    ...

};

var config_tinymce_xy2 = {

    mode: 'exact',
    theme: "simple",
    content_css : "my.css",
    ...
};

init_obj = {element_id:'my_editor_id', window: window};
$.extend(true, init_obj, config_tinymce_xy);
tinyMCE.execCommand('mceAddFrameControl',false, init_obj);
Другие вопросы по тегам