2011-08-20 3 views
5

인라인 블록에서 Add another {{ verbose_name }}을 클릭하면 tinymce-textatea가 표시되지만 모든 컨트롤과 편집은 비활성화됩니다 (콘솔에서는 오류 없음). 3에서 첫 번째 textarea의 tinymce 제대로 작동합니다. 초기화 문제입니다.
코드 :django StackedInline tinyMCE 문제

#templates\admin\base.html 
<script type="text/javascript" src="{% admin_media_prefix %}tinymce/jscripts/tiny_mce/tiny_mce.js"></script> 
<script type="text/javascript"> 
    window.__admin_media_prefix__ = "{% filter escapejs %}{% admin_media_prefix %}{% endfilter %}"; 

    var tMCE = tinyMCE.init({ 
     //General otptions 
     mode : 'textareas', 
     theme: 'advanced', 
     readonly : false, 
     plugins : '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 options 
     theme_advanced_buttons1 : 'save,newdocument,|,bold,italic,underline,strikethrough,|,justifyleft,justifycenter,justifyright,justifyfull,|,formatselect,fontsizeselect,|,forecolor,backcolor', 
     theme_advanced_buttons2 : 'cut,copy,paste,pastetext,pasteword,|,search,replace,|,undo,redo,|,link,unlink,anchor,|,image,media,|,fullscreen,code', 
     theme_advanced_buttons3 : '', 
     theme_advanced_toolbar_location : 'top', 
     theme_advanced_toolbar_align : 'left', 
     theme_advanced_statusbar_location : 'bottom', 
     theme_advanced_resizing : true, 

     file_browser_callback : function(field_name, url, type, win) { 
      var w = window.open('/elfinder', null, 'width=1000,height=800'); 
      w.tinymceFileField = field_name; 
      w.tinymceFileWin = win; 
     } 

    }); 
</script> 

#admin.py 
class PostInline(admin.TabularInline): 
    model = Post 
    readonly_fields = ('created', 'updated') 

class ItemAdmin(admin.ModelAdmin): 
    inlines = [ 
     PostInline, 
    ] 
    readonly_fields = ('created', 'updated') 

UPDATE :

#base.html 

$(document).ready(function(){  
    tinyMCE.settings = tinyMCE_opt; 
    $('textarea:not(.inline-group textarea)').each(function() { 
     tinyMCE.execCommand('mceAddControl', false, this.id); 
    }); 
}); 
#stacked.html 
$(rows).formset({ 
      prefix: "{{ inline_admin_formset.formset.prefix }}", 
      addText: "{% blocktrans with inline_admin_formset.opts.verbose_name|title as verbose_name %}Add another {{ verbose_name }}{% endblocktrans %}", 
      formCssClass: "dynamic-{{ inline_admin_formset.formset.prefix }}", 
      deleteCssClass: "inline-deletelink", 
      deleteText: "{% trans "Remove" %}", 
      emptyCssClass: "empty-form", 
      removed: updateInlineLabel, 
      added: (function(row) { 
       initPrepopulatedFields(row); 
       reinitDateTimeShortCuts(); 
       updateSelectFilter(); 
       updateInlineLabel(row); 

       $(row).find('textarea').each(function() { 
        tinyMCE.execCommand('mceAddControl', false, this.id); 
       }); 

      }) 
     }); 

그러나 또 다른 문제가 나타납니다
오류가 더 이상 및 인라인의 텍스트 영역이 작동하지 않습니다 formset 방법을 발생한 경우는 간단한 텍스트 영역

+0

는 TinyMCE에 4 명령이'tinymce.execCommand ('mceAddEditor', 거짓, this.id)을하게된다 같은데;',하지만 난이 하드에 자신의 문서를 찾을 발견했다. –

답변

3

솔루션 (감사 Thomas) 사용할 필요가

: 여기

#base.html 
$(document).ready(function(){  
    tinyMCE.settings = tinyMCE_opt; 
    $('textarea:not(.inline-group textarea)').each(function() { 
     tinyMCE.execCommand('mceAddControl', false, this.id); 
    });   
}); 

#stacked.html 

$(rows).formset({ 
    prefix: "{{ inline_admin_formset.formset.prefix }}", 
    addText: "{% blocktrans with inline_admin_formset.opts.verbose_name|title as verbose_name %}Add another {{ verbose_name }}{% endblocktrans %}", 
    formCssClass: "dynamic-{{ inline_admin_formset.formset.prefix }}", 
    deleteCssClass: "inline-deletelink", 
    deleteText: "{% trans " 
    Remove " %}", 
    emptyCssClass: "empty-form", 
    removed: updateInlineLabel, 
    added: (function (row) { 
     initPrepopulatedFields(row); 
     reinitDateTimeShortCuts(); 
     updateSelectFilter(); 
     updateInlineLabel(row); 
     $(row).find('textarea').each(function() { 
      tinyMCE.execCommand('mceAddControl', false, this.id); 
     }); 


    }) 
}); 

$('.dynamic-{{ inline_admin_formset.formset.prefix }} textarea').each(function() { 
    tinyMCE.execCommand('mceAddControl', false, this.id); 
}); 
+0

문제를 참조하십시오 : 닫기 아이콘을 클릭하고 다른 {{verbose_name}} tinyMCE 추가 실패를 클릭하십시오. 솔루션 :'제거 : 함수 (행) { updateInlineLabel (row); $ (row) .find ('textarea') .each (function() { tinyMCE.execCommand ('mceRemoveControl', false, this.id); }}); },' – cetver

2

입니다 불행히도 "새로운 인라인"버튼을 눌러서 mce를 새로 만든 cr에 첨부해야합니다. 필드를 직접 먹었다. 또는 전체 페이지를 다시 시작할 수는 있지만 낭비 일뿐입니다.

편집 : 당신이

django.jquery("#id-of-button").click(function() { 
    tinyMCE.execCommand('mceAddControl',false,'id-of-new-textarea'); 
} 
+0

>> 새로 만든 필드에 mce를 첨부하십시오. 이 작업을 수행하는 방법? – cetver

+0

질문 업데이트 – cetver

0

는 (적어도 TinyMCE에 3.x의에) 작동하는 해킹하지 않고도이다 템플릿을 수정합니다.

django.jQuery(function ($) { // django's copy of jQuery is crucial for old_add.click() 
    setTimeout(function() { 
     $('.add-row a').each(function() { 
      var inline_group = $(this).parents('.inline-group'); 
      var new_add = $(this).clone(); 
      var old_add = $(this); 
      old_add.hide().before(new_add); 
      new_add.click(function() { 
       old_add.click(); 
       if (inline_group.find('.mceEditor').length) { 
        var widget = inline_group.find('.form-row:not(.empty-form) .mceEditor'); 
        var textarea = widget.prev('textarea').show(); 
        widget.remove(); 
        tinyMCE.execCommand('mceAddControl', true, textarea.attr('id')); 
       } 
      }); 
     }); 
    }, 0); 
});