TinyMCE присоединяется, а затем исчезает при использовании модального диалога jquery и MVC.net - PullRequest
2 голосов
/ 07 ноября 2011

У меня есть страница MVC.net с кнопкой, которая открывает модальное диалоговое окно jquery. Я открываю свой диалог вот так

$(dialogId).dialog(
            {
                dialogClass: 'test', closeOnEscape: true,
                title: title,
                height: height,
                width: width,
                minHeight: minHeight, maxHeight: maxHeight,
                minWidth: minWidth, maxWidth: maxWidth,
                resizable: resizable,
                modal: true,
                show: 'blind',
                hide: 'blind',
                open: addTinyMCE
            });

addTinyMCE - это функция, которая живет в моей части, а часть - это содержимое для модальной части. Добавить крошечный код MCE выглядит следующим образом

function addTinyMCE() {
        $('#emailMessage').tinymce({
            script_url: '/Scripts/tiny_mce/tiny_mce.js',

            theme: "advanced",
            plugins: "myButton,autolink,lists,spellchecker,pagebreak,style,layer,table,save,advhr,advimage,advlink,emotions,iespell,inlinepopups,insertdatetime,preview,media,searchreplace,print,contextmenu,paste,directionality,fullscreen,noneditable,visualchars,nonbreaking,xhtmlxtras,template",

            theme_advanced_buttons1: "xedomenubutton,undo,redo,bold,italic,underline,|,justifyleft,justifycenter,justifyright,justifyfull",
            theme_advanced_buttons2: "formatselect,fontselect,fontsizeselect",
            theme_advanced_buttons3: "bullist,numlist,|,outdent,indent,|,link,unlink,anchor,image,|,insertdate,inserttime,|,forecolor,backcolor,|,fullscreen",
            theme_advanced_toolbar_location: "top",
            theme_advanced_toolbar_align: "left",
            theme_advanced_resizing: true,

            skin: "o2k7",

            template_external_list_url: "js/template_list.js",
            external_link_list_url: "js/link_list.js",
            external_image_list_url: "js/image_list.js",
            media_external_list_url: "js/media_list.js"            
        });
    }

myButton - это крошечная кнопка MCE, которую я создал для некоторых пользовательских действий.

Когда я нажимаю кнопку на моей главной странице, чтобы открыть диалоговое окно, диалоговое окно открывается, как и ожидалось, но редактор tinymce мигает напротив текстовой области во всплывающем окне частичного диалога и затем возвращается к обычной текстовой области. У части также есть выпадающий список, который при изменении обновляет содержимое текстовой области tinymce (ajax), и снова текстовая область появляется с присоединенным редактором tinymce, а затем возвращается к нормальной текстовой области.

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

tinymce.create
tinymce.PluginManager.add

Когда я пытаюсь присоединить редактор к текстовой области на моей главной странице, все работает как положено (редактор прикрепляется к текстовой области, отображается пользовательская кнопка и работает правильно).

Есть предложения?

Я использую jquery-версию редактора tinymce.

EDIT:

В конце концов я вернулся к использованию JQuery версии tinyMCE, так как она работала гораздо лучше с UI Dialog, чем стандартная версия.

Мне удалось правильно загрузить пользовательскую кнопку, и редактор закрылся, когда я закрыл и открыл диалоговое окно.

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

setTimeout(function () { initTinyMCE(); }, 500);

и это работает, интересно, но не решение. Похоже, здесь есть проблема с синхронизацией.

Как я могу убедиться, что текстовая область готова к использованию редактора tinymce или инициализация tinymce запускается слишком рано?

Ответы [ 2 ]

0 голосов
/ 07 ноября 2011

Сборка jQuery tinymce является источником проблем и работает медленно.Советую использовать обычную сборку tinymce и дополнительно загружать jQuery.

При инициализации пользовательская кнопка должна быть инициализирована.Это можно сделать с помощью собственного плагина или параметра инициализации setuop.

0 голосов
/ 07 ноября 2011

Я не использовал версию jQuery, так что это выстрел в темноте.Обычная версия не может быть лениво загружена через Ajax.

http://tinymce.moxiecode.com/forum/viewtopic.php?pid=66531#p66531

Используемый мной хак, который не был тщательно протестирован, запускается так:

window.tinyMCEPreInit = {base : 'your/js/folder/tinymce', suffix : '', query : ''};
// Lazily load your TinyMCE javascript
window.tinymce.dom.Event.domLoaded = true;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...