Nekonzistentní definice n: maker

Upozornění: Tohle vlákno je hodně staré a informace nemusí být platné pro současné Nette.
juzna.cz
Člen | 248
+
0
-

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:

  1. explicitne definovat zpracovani attrMaker vsude, kde je mozne je pouzit
  2. 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 | 8133
+
0
-

Proč by n:form nemělo fungovat? Co myslíš tím „vygeneruje skaredy vystup“?

juzna.cz
Člen | 248
+
0
-

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
+
0
-

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?

Filip Procházka
Moderator | 4668
+
0
-

Rozhodně není!

David Grudl
Nette Core | 8133
+
0
-

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.

hrach
Člen | 1834
+
0
-

David Grudl:
ještě lepší by bylo tento zápis podporovat.

není to to, o co se juzna snaží?

juzna.cz
Člen | 248
+
0
-

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)?

Eda
Backer | 220
+
0
-

Právě jsem pěknou chvilku řešil, proč mi nefunguje formulář, jak bych očekával, a koukám, že už je to vlastně vyřešeno, akorát to není mergnuto do Nette. Je zde ještě nějaký problém? Co brání přidání fixu do Nette?

David Grudl
Nette Core | 8133
+
0
-

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
+
0
-

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)

enumag
Člen | 2118
+
0
-

@Filip: Mne by to tedy napadlo. :-D Raději bych zůstal u n:form.

Jan Tvrdík
Nette guru | 2595
+
0
-

@Filip Procházka: Moc to komplikuješ, funguje normálně <form n:name>