Atributy formulařových prvků v Nette 2.2

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

Dříve šlo nastavit nějaký custom atribut metodou setOption(), od Nette 2.2 mi to však přestalo fungovat. Je jedno, jestli vykresluju prvky ručně, nebo přes makro {control}.

Editoval sKopheK (19. 5. 2014 14:14)

David Matějka
Moderator | 6445
+
0
-

se setOption mohlo fungovat maximalne tak nastaveni tridy nebo id, pouzij getControlPrototype

David Grudl
Nette Core | 8206
+
0
-

Co konkrétně nefunguje? A v jaké verzi to fungovalo?

sKopheK
Člen | 207
+
0
-

Šlo mi o nastavení custom atributu pro další zpracování v JavaScript – něco jako data-attribute. Spletl jsem si to s metodou setAttribute(). Obecně mám asi zmatek v tom nastavování atributů HTML elementů formulářových prvků.

  • pro nastavení atributů s názvem podobným výše zmíněnému je nutné volat metodu setAttribute() přímo na objektu formulářového prvku
  • atributy s klasickými názvy jdou nastavit na objektu formulářového prvku i na jeho HTML elementu metodou setXY() nebo jen XY()

A setOption() slouží teda jen pro nastavení custom proměnných např. pro vlastní makra apod. a vypisuje se jen class a id (proč?), které přes ně zadáme?

awsickness
Člen | 98
+
0
-

ja se pridam s timto dotazem.
zda je mozne udelat neco takoveho:

$element->setAttribute('class','foo');

a pak v sablone

<input n:name="element" class='bar'>

nyni se mi pozde class foo prepise na bar.
Idealni stav applikace nastavi tridy podle vlastni logiky a koder si jen dopise tridy, ktere potrebuje
Diky.

Zax
Člen | 370
+
0
-

@awsickness Možná by to šlo takhle, ale nevím, jenom mě to zrovna napadlo ;-)

$element->addClass('foo');
<input n:name="element" n:class='bar'>
Šaman
Člen | 2655
+
0
-

awsickness napsal(a):

ja se pridam s timto dotazem.
zda je mozne udelat neco takoveho:

$element->setAttribute('class','foo');

a pak v sablone

<input n:name="element" class='bar'>

nyni se mi pozde class foo prepise na bar.
Idealni stav applikace nastavi tridy podle vlastni logiky a koder si jen dopise tridy, ktere potrebuje
Diky.

Takhle jen napojíš zpracování prvku na tvůj ručně vykreslený input. Jestli chceš, aby se ti vykreslil i se všemi atributy, použij

{form fooBar class => 'ajax'}
{label foo /}: {input foo}
{label bar /}: {input bar, class => 'bar', placeholder => 'Bar input'} # výsledkem bude class="foo bar"
{/form}

Editoval Šaman (21. 8. 2014 20:25)

awsickness
Člen | 98
+
0
-

tak bohuzel ani takto to nefunguje. stale se mi prepisuje hodnotou pouzitou v sablone.