Jak pridavat ve formulari polozky po odeslani ajaxem?
- Azim
- Člen | 41
Zdravim.
Resim nasledujici problem – mam formular sestavajicich z checkboxu. Po
kliknuti na checkbox formular ajaxove odesilam, z db vytahnu data a pote
potrebuji do formulare pridat polozku (pro jednoduchost textinput) naplnenou
daty z db.
Zkousel jsem to resit tak, ze si v submit metode formu zkontroluji, jestli se
odesila ajaxove, pokud ano, nastavim promennou presenteru a podle ni upravuji
tvorbu formulare v tovarnicce (= pridavam textinputy). Takto to vsak asi
nefunguje, protoze se vykresluje porad stejny formular.
Nekdo nejaka rada jak na to?
Diky
- Vojtěch Dobeš
- Gold Partner | 1316
Vysvětlení tohoto jevu je následující: pokud nastavuješ proměnné, které ovlivní sestavení formuláře, ve zpracování onoho formuláře, je pochopitelné, že v okamžiku zavolání toho zpracovávacího callbacku již formulář musí být sestavený :).
Možným řešením je sestavit vždy formulář kompletní, renderovat ho manuálně, a v tom callbacku si pouze do šablony předat nějakou proměnnou, podle které se některé prvky vykreslí a jiné ne. A třeba to ještě zabalit do snippetu, a ten invalidovat. Zároveň ti to bude fungovat i bez Ajaxu. Jen bude možná třeba nějak ošetřit, aby ti tam nevznikla bezpečností díra či nekonzistence (kdyby nějaký šotek ti podstrčil taková POST data, jaká by nikdy neměla vzniknout, protože počítáš s tím, že prvek se nevykreslil, ale Nette formulář ho bude očekávat (protože prvek bude nastavený).
- Azim
- Člen | 41
Diky za radu.
neexistuje na to nejaky bestpractice? zda se mi zvrhle v tovarnicce vyrabet cely obrovsky formular a pak v sablone podle promennych nektere casti nevykreslovat. nebo se to tak bezne dela?
v soucasne dobe to mam vyresene tak, ze ve formu mam definovany container, ktery si v submit metode zpristupnim, do nej pridam potrebne inputy a pak form invaliduji.
Editoval Azim (14. 2. 2013 18:32)