Nekonzistentní definice n: maker
- juzna.cz
- Člen | 248
Dneska jsem nejakou dobu stravil ladenim problemu, kdy mi n:form
makro nefungovalo vubec podle predpokladu. Pak jsem zjistil, ze
form
macro vlastne n:attributovy zapis vubec nepodporuje,
avsak Nette me na to vubec neupozornilo.
Kouknutim do zdrojaku
jsem zjistil, ze pokud neni definovane attrMacro, tak se automaticky
pouzije beginMacro. Na tomto principu si vklidecku funguji napriklad
bloky a snippety, ktere v beginMacru maji zabudovane
zpracovani i onoho attrMacra.
Takze, ackoliv block
(a jemu podobne) nemaji v definici
attrMacro vubec nastavene, tak je mozne jej pouzit.
Problem nastane napriklad u form makra, ktere v definici take o attrMacru nema ani zminky, a ani ho neumi zpracovat a vygeneruje skaredy vystup™. Browser to nejak prechroupe, takze si na prvni pohled nevsimnete niceho spatneho, ani pri pohledu do WebInspectoru/Firebugu.
Bylo by dobre bud:
- explicitne definovat zpracovani attrMaker vsude, kde je mozne je pouzit
- explicitne definovat, ze attrMacro neni podporovane
… a nasledne hlasit error, pokud to nekdo pouzije spatne.
Nejake zkusenosti u vas? Stalo se vam toto uz nekdy? Prosim o vas nazor na vec. Dik
- David Grudl
- Nette Core | 8218
Proč by n:form nemělo fungovat? Co myslíš tím „vygeneruje skaredy vystup“?
- juzna.cz
- Člen | 248
Sablona (schvalne upper case, aby bylo videt, jak se co generuje):
<FOrm n:form="addExplanation" class="ajax" >
Vygeneruje:
<form action="..." method="post" id="frm-addExplanation"> // generovany form - renderFormBegin
<FOrm class="ajax" > // muj form
...
</FOrm> // konec mojeho formu
<div><input type="hidden" name="x" value="" /></div> // generovany - renderFormEnd
</form>
- juzna.cz
- Člen | 248
error report: https://github.com/…tte/pull/587
n:form support: https://github.com/…tte/pull/588
- juzna.cz
- Člen | 248
O to zakernejsi tento problem je, ze prohlizec kdyz vidi 2 formulare vnorene v sobe (viz vysledek kodu o 2 prispevky vys), tak ten vnitrni tise ignoruje a nikomu nic nerekne. Clovek se pak pekne divi, dokud se nepodiva do zdrojaku.
Je zadouci, aby Nette zadne varovani nezobrazilo?
- David Grudl
- Nette Core | 8218
Základní pravidlo je takové, že každé párové makro lze zapsat jako n:makro. Tudíž chování je zcela korektní a zakázat n:form (tedy generovat varování při použití n:form) je kontraproduktivní.
Smysl by dávalo generovat varování pouze při použití <form n:form>, ještě lepší by bylo tento zápis podporovat.
- juzna.cz
- Člen | 248
Tak to pak jo. Nenapadlo me, ze by nekdo mohl napsat
<div n:form="login">
aby dostal ten div obalenej
formularem.
Nebo treba <div tag-form="...">
, coz uz je IMO uplna capina
ale projde. Budiz, asi nema smysl uzivatele hlidat od takovych blbosti.
<form n:form>
podpora je zde (misto form tagu vypise
jen atributy). Ma zde smysl davat jine chovani pro
<div n:form>
(tzn stejne jako je ted)?
- David Grudl
- Nette Core | 8218
V dev verzi je podpora n:atributů nad všemi prvky, tj. input, select, button i form. Aby neexistovaly zbytečně čtyři atributy n:input, n:select, n:button a n:form, nahradilo je společné n:name. To lze (tedy jen u inputu) používat od Nette 2.0.11.
- Filip Procházka
- Moderator | 4668
Co takhle místo <form n:form>
mít
<form n:action="name">
? S tím že makro by se zpracovalo
pouze pokud by bylo na tagu <form>
, jinak exception.
Bylo by to v duchu <input n:name="email">
:)
Jen mě tak napadá, snad by nikdo neočekával, že tam má zapsat odkaz
jako v {link}
:-/
Editoval Filip Procházka (11. 7. 2013 22:55)