2015-11-12 10 views
9

Nel frattempo ho ottenuto molto più tempo. C'è comunque un problema che sto ancora avendo.TinyMCE scompare dopo la reinizializzazione in AJAX caricato DIV

La situazione è simile a questo:

Ho un div con più aree di testo che vengono caricati con una chiamata JQuery AJAX.

L'inizializzazione iniziale grandi opere utilizzando il seguente codice:

function InitializeTinyMCE() { 

/// This can also be positioned outside a function in the document ready section 
$.get("[@appbase]sereneadmin/pages/?SetAjaxCall=editor&page=[@editparam]", function (EditorHTML) { 
    $("#SerenePageEditors").html(EditorHTML).find('.EditorField').tinymce({ 
     script_url: '[@appbase]script/tinymce/js/tinymce/tinymce.jquery.min.js', 
     plugins: [ 
      "advlist autolink lists link image charmap print preview hr anchor pagebreak", 
      "searchreplace wordcount visualblocks visualchars code fullscreen", 
      "insertdatetime media nonbreaking save table contextmenu directionality", 
      "emoticons template paste textcolor colorpicker textpattern imagetools" 
     ], 

     content_css: '[@appbase]app/template/css/bootstrap.min.css, [@appbase]app/template/css/div.highlighting.css' // includes both css files in header 

    }); 
    tinyMCE.execCommand('mceRemoveEditor', true, '#WysyWig'); 
    tinyMCE.execCommand('mceAddEditor', false, '#WysyWig'); 
}); 


} 

Ma dopo aver aggiunto un altro editor in più da un onclick la chiamata AJAX ottiene eseguito perfettamente e l'editor viene aggiunto nel database e quasi tutto funziona bene. .. tranne ... Gli editor di TinyMCE scompaiono.

Ho fatto qualche ricerca e la prima cosa che ho scoperto che non ho fatto è stata la rimozione dell'editor. Perché questo deve essere fatto prima di reinizializzarlo.

così ho aggiunto:

tinyMCE.execCommand('mceRemoveEditor', true, '#WysyWig'); 

Purtroppo questo non ha fatto alcuna differenza. Quindi forse sto usando male.

Sto usando TinyMCE 4.0

Spero che qualcuno vede il mio errore e possiamo proseguire il viaggio. TIAD !!

P.S. [@appbase] viene sostituito da PHP per visualizzare il percorso assoluto dello script. :-)

+0

È la chiamata Ajax tornare più campi dell'editor, o semplicemente quello nuovo? –

risposta

2

È necessario rimuovere gli editor prima di aggiungere quelli nuovi ... se leggo correttamente il codice, si sta tentando di rimuovere gli editor subito dopo averli creati.

Dal .get() è asincrona, la rimozione potrebbe accadere prima che si creano, ma non è quello che ci saremmo puntando.

Vorrei iniziare rimuovendo qualsiasi editor dall'interno degli #SerenePageEditor prima di sostituire il contenuto HTML. Probabilmente con una chiamata che è simile al seguente:

tinymce.remove('#SerenePageEditors .EditorField'); 

applicato sul vostro codice, sarebbe simile a questa:

function InitializeTinyMCE() { 
    /// This can also be positioned outside a function in the document ready section 
    $.get("[@appbase]sereneadmin/pages/?SetAjaxCall=editor&page=[@editparam]", function (EditorHTML) { 

     tinymce.remove('#SerenePageEditors .EditorField'); 

     $("#SerenePageEditors").html(EditorHTML).find('.EditorField').tinymce({ 
      script_url: '[@appbase]script/tinymce/js/tinymce/tinymce.jquery.min.js', 
      plugins: [ 
       "advlist autolink lists link image charmap print preview hr anchor pagebreak", 
       "searchreplace wordcount visualblocks visualchars code fullscreen", 
       "insertdatetime media nonbreaking save table contextmenu directionality", 
       "emoticons template paste textcolor colorpicker textpattern imagetools" 
      ], 

      content_css: '[@appbase]app/template/css/bootstrap.min.css, [@appbase]app/template/css/div.highlighting.css' // includes both css files in header 

     }); 
    }); 
} 
+0

Quello che ottengo usando questo codice è: RiferimentoErrore: tinymce non definito –

+0

Inoltre uso TinyMCE 4.x tinymce.remove ('# SerenePageEditors .EditorField'); Credo che questo non funzionerà e dovrebbe essere tinyMCE.execCommand giusto? –

+0

Dipende dai dettagli della configurazione. Mi sto basando su TinyMCE 4.x docs http://www.tinymce.com/wiki.php/api4:method.tinymce.remove.static. Se si dispone di un collegamento in diretta in cui il codice è in esecuzione, potrei vedere nel giusto contesto. Se la tua chiamata 'execCommand' a mceRemoveEditor è corretta (da quello che vedo, non sembra che corrisponda alla documentazione e sembra che abbia come target solo i nodi degli editor con id' WysyWyg', ma potrei sbagliarmi lì), puoi sempre provare a chiamare ** prima ** aggiungendo nuovi editor. –