Dynamický formulár – pure JS
- DOBss
- Člen | 24
Zdarec,
tentoraz sa moja otázka týka Nette Forms & JS – ako
sú vlastne oni na tom, čo sa týka dynamického počtu hodnôt
v kontajnery? Áno, čítal som viaceré téma, ako #1825, #12494,
#10938
a iné… síce je to všetko pekné a ďakujem dotyčným za príklady, ale
vyriešiť problém týmto spôsobom by nebol problém… ja však mám rád
čistý kód a držím sa zásady:
JS má na starosti interakciu s userom, PHP tvorbu obsahu a
spracovanie dát…
Poďme si problém načrtnúť:
máme x prvkov v kontajnery gifts[] {x ∈ (0,20>}
Východiskový počet prvkov je 1 a následne môže user pridať ďalšie
(max. 20 v tomto prípade). Prvky sú indexované samozrejme 0–19.
Ako som spomínal vyššie, nebol by problém pridať ďalší prvok použitím
snippetu a AJAX, ale podľa mojej zásady PHP sa nemá čo starať o interakciu
s userom (onclick is for JS, submitted is for PHP… [onsubmit still for
JS]).
Čiže ja nechcem pre pridanie prvku použiť žiaden AJAX a
jednoducho prvok pridať duplikáciou predchádzajúceho (samozrejme potom by
prebehli potrebné úpravy ostatných prvkov – hlavne tabindex a pod.).
Proste aby sa Nette nestaral o počet prvkov v poli… lebo dajme tomu –
user pridá ďalších 19 prvkov, 4 z nich zmaže a potom ich znova pridá,
zmaže ďalší jeden a tiež ho znova pridá… to je 19 + 2*4 + 2*1 =
29 zbytočných XHR… zbytočná záťaž servera a
zbytočná nutnosť zdržovania usera…
Čiže v kocke - Ako dosiahnuť, aby Nette spracovalo všetky prvky v kontajnery bez ohľadu na ich počet a bez nutnosti XHR (a samozrejme bez vytvorenia bezpečnostnej diery).
Vopred ďakujem (hoci sa mi podarilo napísať kratší román ;D).
PS: Pod prvkom mám na mysli
<input type="text" name="gifts[x]" />
Roland „DOBss“ Dobos
- DOBss
- Člen | 24
hmm.. ani nie…
DOBss napsal(a):
Čiže v kocke - Ako dosiahnuť, aby Nette spracovalo všetky prvky v kontajnery bez ohľadu na ich počet a bez nutnosti XHR (a samozrejme bez vytvorenia bezpečnostnej diery).
XML Http Request (XHR) = AJAX
mňa by skôr zaujímalo, ako dosiahnuť, aby Nette spracovalo polia pridané pomocou JS (napr. duplikáciou pomocou jQuery clone a nie AJAX requestom)…
- David Matějka
- Moderator | 6445
imho, kdyz to budes resit na strane klienta normalni javascriptem (pridavat html inputy atd) stejne, jak by to udelal replicator, tak si s tim replicator poradi..
- LeonardoCA
- Člen | 296
určitě to replicátor zvládne, sestavuje si formulář na základě hodnot z post a počet položek nemusí být předem daný, stačí když si upravíš funkčnost tlačítek +/- aby negenerovaly requesty nebo je nepoužívat a ošetřit si to na straně html/js po svém