Nefunkční tinyMce po ajaxovém reloadu formuláře

trta911
Člen | 32
+
0
-

Ahoj, mám manuálně vykreslovaný formulář a v něm select. Na selectu mám navěšený ajax onchange a tím ve formuláři měním hodnoty na základě toho selectu. vše funguje parádně kromě textarea s tinymce. Po ajaxovém redrawcontrol (snippetem je obalený celý form) se prostě tinymce ztratí a zůstane tam pouze čistá textarea.

Zkoušel jsem dávat init pro tinymce pod $.nette.ext({}) ale to taky nepomohlo.

Jak prosím donutím tinymce aby se znovu načetlo po tom ajaxu?

Editoval trta911 (3. 10. 2018 19:33)

Ondřej Kubíček
Člen | 494
+
0
-
$.nette.ext({
	success: function (payload) {
		//inicializace tinymce
	}
});
trta911
Člen | 32
+
0
-

Ahoj, díky – nakonec jsem to vyřešil následujícím způsobem:
inicializaci samotného tinymce jsem obalil do funkce např. NetteTinyMCE(); (inicializaci mám totiž v úplně jiném souboru než zbytek js věcí)

Dále, aby se mi editor zobrazoval bez ajaxu jsem pod nette ajax init přidal i tuto funkci a jede to:

$(function () {
        $.nette.init();
        NetteTinyMCE();
});

a dále – ještě před provedením ajax. požadavku je třeba přenést data z editoru do textarea jinak se text z tinymce ztratí a to pomocí tinyMCE.triggerSave(); takto:

$(document).on('change','#frm-campaignForm-pivo_id', function(){
tinyMCE.triggerSave();
$.nette.ajax({
  url : {link jesteJednoPivo!},
  type : 'GET',
  data: {formdata: $('form').serialize()},
  error: function(){alert("Theres an error with AJAX.");}
  });
});

a pak, aby bylo možno tinymce znovu inicializovat je třeba tu instanci zničit a následně pomocí té funkce do které jsem obalil init tinymce znovu inicializovat → asi takto:

$.nette.ext({
    success: function () {
            tinymce.remove();
            NetteTinyMCE();

    }
});

Tak snad to někomu dalšímu pomůže a že jsem to napsal alespoň trochu srozumitelně. Chápu, že to je asi kostrbaté řešení ale nic lepšího mě nenapadlo…je to ale funkční

GEpic
Člen | 562
+
0
-

Pro tinymce bych určitě nepoužíval GET, ale POST.