Ajax a více po sobě jdoucích oprací – formulář se nezpracuje
- nettolog
- Člen | 68
Zdravím, řeším zrovna jednu ajaxovou aplikaci, která funguje následovně:
- uživatel má nějakou tabulku s výpisem záznamů z db
- na každém řádku je tlačítko k úpravě (ajax), standardně v presenteru mám handle metodu, která kliknutí v pořádku zpracuje
- po kliknutí se ověřuje, jestli má uživatel k záznamu přístup, apod. a pokud se splní všechny podmínky pro úpravu záznamu, provede se něco takového:
$this->template->editForm = $this->createComponentForm($id);
$this->redrawControl('editForm');
Tzn. překreslí se snippet editForm
, ve kterém se vytvoří
formulář z proměnné $editForm
.
- v presenteru je pak ještě metoda
processForm($form)
, která zpracovává formulář opatřený třídou ajax, který počítá s tím, že uživatel napíše nevalidní hodnoty, apod. (validace neprobíhá na úrovnicreateComponentForm
, ale až na základě dalších dotazů do databáze, takže to vše řeším vprocessForm($form)
(další snippet, ve kterém je proměnná s aktuální chybou, který se při chybě překreslí).
Vše funguje do bodu, kdy se formulář odešle. Prakticky nic se totiž
nestane, jen se obnoví stránka, takže asi selže i ajax. Je možné, že je
to tím, že vytvoření formuláře závisí na metodě handleX
,
která už se při odeslání formuláře nevolá?
Problém je hlavně v tom, že metoda processForm($form)
se po
odeslání formuláře vůbec nezavolá.
Nenapadá vás, kde hledat příčinu?
Editoval nettolog (25. 8. 2015 16:54)
- iguana007
- Člen | 970
Jelikož ten ajax formulář vykresluješ znovu ajaxem, tak bych si tipoval, že se ti už na něj nenavěsí ten event listener, který by ti ten nově vykreslený form udělal opět ajaxovým … na fóru se to řešilo už xkrát, hledej ve vláknech typu „nefunguje ajax po invalidaci“ apod.
Ještě bych si ověřil v debuggeru browseru, co se ti po tom submitu vlastně volá a s jakými parametry, tam by mohl být taky zakopaný pes.
Poslední co mne napadá, aby sis ověřil, zda-li se ti zpracovává ve správném pořadí v presenteru, tj. podle životního cyklu: https://doc.nette.org/…n/presenters#…
- David Matějka
- Moderator | 6445
Je možné, že je to tím, že vytvoření formuláře závisí na metodě handleX, která už se při odeslání formuláře nevolá?
Ano, tim to je. Pro takovehle veci nemuzes pouzivat signal, takze si bud vytvor akci nebo alespon pouzij parametr v ramci stejne akce, kterym reknes, kterou polozku chces editovat.
Druhy problem je v pouzivani komponent, nikdy nevolej
createComponent*
metody primo. V createComponent si zjisti to ID
z parametru, kratce: