Заставьте TinyMCE правильно работать с JEditable - PullRequest
4 голосов
/ 07 апреля 2011

Я использую плагин Edit-in-Place JQuery, JEditable: http://www.appelsiini.net/projects/jeditable.

Я бы хотел использовать TinyMCE при редактировании, поэтому я нашел дополнительный скрипт для его работы: http://sam.curren.ws/index.cfm/2008/6/12/jEditable-TinyMCE-Plugin.

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

код

        <script type="text/javascript" src="jscripts/tinymce/jscripts/tiny_mce/tiny_mce.js"></script> <!-- TinyMCE -->
        <script type="text/javascript" src="jscripts/jquery-1.5.1.min.js"></script> <!-- JQuery-->
        <script type="text/javascript" src="jscripts/jquery.jeditable.mini.js"></script><!-- JEditable plugin-->
        <script type="text/javascript" src="jscripts/jquery.tinymcehelper.js"></script>
        <script type="text/javascript" src="jscripts/jquery.company.js"></script>
<div class="editable_textarea">Edit this div</div>

Что происходит, когда я нажимаю на текст «Edit this div», загружается TinyMCE. Но затем, когда я нажимаю на текстовую область, текстовая область исчезает, и я просто вижу текст «Редактировать этот div» (как будто я не нажимал, чтобы редактировать на месте). Эта проблема возникает только при загрузке / обновлении страницы. После этого все работает отлично.

Это мой код для jscripts / jquery.tinymcehelper.js (точно такой же, как в http://sam.curren.ws/index.cfm/2008/6/12/jEditable-TinyMCE-Plugin):

$.fn.tinymce = function(options){
   return this.each(function(){
      tinyMCE.execCommand("mceAddControl", true, this.id);
   });
}

function initMCE(){
   tinyMCE.init({
        mode : "textarea",
        theme: "advanced",
        height: "100",
        plugins: "table, tinyautosave, imagemanager, spellchecker, autoresize",
        theme_advanced_buttons1_add_before : "tinyautosave, code, separator, delete_table",
        theme_advanced_buttons1 : "bold,italic,underline,strikethrough,|,justifyleft,justifycenter,justifyright,fontsizeselect,search,replace,|,bullist,numlist,|,outdent,indent,blockquote,|,undo,redo,|,link,unlink,code,|,forecolor,backcolor,|,insertimage,spellchecker",
        theme_advanced_buttons2 : "",
        theme_advanced_buttons3 : "",
        theme_advanced_toolbar_location : "top",
        theme_advanced_toolbar_align : "left"
    });
}

initMCE();

$.editable.addInputType('mce', {
   element : function(settings, original) {
        var textarea = $('<textarea id="'+$(original).attr("id")+'_mce"/>');
        if (settings.rows) {
           textarea.attr('rows', settings.rows);
        } else {
           textarea.height(settings.height);
        }
        if (settings.cols) {
           textarea.attr('cols', settings.cols);
        } else {
           textarea.width(settings.width);
        }
        $(this).append(textarea);
           return(textarea);
        },
        plugin : function(settings, original) {
           tinyMCE.execCommand("mceAddControl", true, $(original).attr("id")+'_mce');
           },
        submit : function(settings, original) {
           tinyMCE.triggerSave();
           tinyMCE.execCommand("mceRemoveControl", true, $(original).attr("id")+'_mce');
           },
        reset : function(settings, original) {
           tinyMCE.execCommand("mceRemoveControl", true, $(original).attr("id")+'_mce');
           original.reset();
   }
});

Наконец, это мой код «настройки»:

// Jeditable customization
$(function(){
       $(".editable_textarea").editable('ajax/save.php?editnotetext',
        {
          type : 'mce',
          indicator : 'Saving...',
          tooltip : 'Click to edit...',
          name : 'note_text',
          submit : 'OK',
          cancel : 'Cancel',
          height : '100px'
       });
      $(".dblclick").editable('ajax/save.php?editnotename', { 
        tooltip   : 'Doubleclick to edit...',
        indicator : 'Saving...',
        event   : 'dblclick',
        name : 'name',
        style   : 'inherit'
      });
});

Ответы [ 2 ]

4 голосов
/ 14 апреля 2011

Первое, что я заметил, это то, что ваш метод initMCE() не совсем такой, как в ссылке (я не смог попасть на сайт, но смог вытащить его из кеша Google). В частности, mode должно быть none.

Глядя на документы TinyMCE, кажется, что mode: 'textarea' предназначен для автоматического присоединения к <textarea> элементам. Принимая во внимание, что mode: 'none' предназначен для программного добавления редактора в поле, что и пытается сделать плагин JEditable.

1 голос
/ 07 апреля 2011

Итак, одно «решение», которое я нашел, - использовать вместо него IPWEditor (http://spacebug.com/projects/ipweditor_in-place_wysiwyg_editor/).

Кажется, он не обладает такой функциональностью, как JEditable. Он использует Editable, но в будущем может поддерживать JEditable.

Если кому-то удастся решить проблему с JEditable или у вас есть лучший плагин, пожалуйста, дайте мне знать.

...