[BUG] Zvlášťní chování Nette\Web\Html při podmíněném atributu

Upozornění: Tohle vlákno je hodně staré a informace nemusí být platné pro současné Nette.
jakubkulhan
Člen | 55
+
0
-
echo Html::el('img')->alt('')->__toString(); // vypíše: <img alt="" />
echo Html::el('img')->alt('', TRUE)->__toString(); // vypíše: <img />

Objeveno na d45ce91, pravděpodobně i u předchozích commitů.

kravčo
Člen | 721
+
0
-

Aké je očakávané správanie a na základe čoho?

jasir
Člen | 746
+
0
-

Hlavně by se to mělo chovat v obou případech stejně.

jakubkulhan
Člen | 55
+
0
-

kravčo napsal(a):

Aké je očakávané správanie a na základe čoho?

Očekával bych, že se u obou případů vypíše alt="" – některé atributy opravdu mohu chtít nastavit jako prázdné řetězce (alt u <img> nechť je toho příkladem). Pro vymazání atributu bych to viděl na spíše něco jako ->alt(NULL). Každopádně souhlasím s jasirem, že by chování mělo být konzistentní, ať se zvolí jedna, či druhá varianta za tu správnou.

kravčo
Člen | 721
+
0
-

Ak sa nemýlim, druhý parameter v nastavovaní atribútu značí použitie atribútu ako poľa, napr:

Html::el('span')->style('font-weight', 'bold');

Pri takomto nastavovaní alt ide podľa mňa o misuse, nie o chybu Nette.

jakubkulhan
Člen | 55
+
0
-

kravčo napsal(a):

Ak sa nemýlim, druhý parameter v nastavovaní atribútu značí použitie atribútu ako poľa, napr:

Html::el('span')->style('font-weight', 'bold');

Pri takomto nastavovaní alt ide podľa mňa o misuse, nie o chybu Nette.

Narazil jsem na to, když jsem psal patch na chytré atributy. Chtěl jsem u povinných atributů prostě přidat do vytvořeného kódu ->alt("", TRUE). Přišlo mi neintuitivní, že pokud je podmínka vždy splněna (TRUE), tak proč to nic nepřidává. Při pohledu do kódu to chápu.

jasir
Člen | 746
+
0
-

kravčo napsal(a):

Ak sa nemýlim, druhý parameter v nastavovaní atribútu značí použitie atribútu ako poľa, napr:

Html::el('span')->style('font-weight', 'bold');

Pri takomto nastavovaní alt ide podľa mňa o misuse, nie o chybu Nette.

Mám pocit, že druhý parametr může také TRUE značit přidej attribut vs. přepiš attribut – ale lepší je používat metody ‚addAttr()‘ a ‚setAttr()‘ pro jejich jednoznačnost.

Ale stejná nekonzistence se projeví i pomocí add<Attr>() a set<Attr>():

<?php
	$el = Html::el('img')->setAlt('');  //<img alt="" />
	$el = Html::el('img')->addAlt('');  //<img />

?>

Editoval jasir (31. 8. 2009 15:06)

David Grudl
Nette Core | 8228
+
0
-

fixed