Nespravne spravanie funkcie setClass() & pri Form-ConventionalRenderer
- MIKI
- Člen | 34
Pouzivam verziu Nette Framework 0.9.5 (revision 5eb03f5 released on 2010–07–01)
Pri tvorbe formulara pomocou
$f = new AppForm;
$f->addText('name', 'Meno')
->getControlPrototype()
->setClass('moj')
->setId('mojemeno');
Metoda setClass(‚moj‘) len prida ‚moj‘, a metoda setId(‚mojemeno‘) nenastavi id elementu vobec, preto vysledny element bude nasledovny:
<input type="text" name="name" class="moj text" id="formid-name" />
namiesto ocakavaneho
<input type="text" name="name" class="moj" id="mojename" />
Je to chyba, alebo zamer? Ako je mozne docielit efekt? Cely den sa mi nedari najst funkcne riesenie ani navod ako to spravit.
- toka
- Člen | 253
Více informací o stylu se řeší v tomto
vláknu. Co se týče id
, je to tak podle mne kvůli
validaci – hlavně ti framework usnadňuje práci, nemusíš si nic hlídat,
nad ničím přemýšlet, id
doplní za tebe a validační pravidla
pak „vždy“ fungují.
- westrem
- Člen | 398
Ach jaj, preco postujes nieco za chybu ked to v podstate chyba nie je, Nette nie je deravy framework a vecsina veci ma svoju opodstatnenu logiku a takmer vzdy mas sposob ako to lahko zmenit!
Stihol si to tu postnut skorej ako som napisal do povodneho threadu.
Ako pise redhead na ID mas setHtmlId
, setClass
korektne spravi nastavenie triedy.
Renderer (ten defaultny conventional) potom funguje tak, ze k nastavenym triedam appenduje tie z wrappers. Ak ti to nevyhovuje, uprav si wrappers alebo pouzivaj vlastny renderer.
redhead napsal
class(‚neco‘, TRUE). Kde to TRUE to nějak přemazává. Ale možná kecám blbosti
Keby ste chlapci obcas dosledne studovali API tak zistite, ze to
TRUE
je tam na vynutenie pridavanie a nie nastavovania API
#1
a nasledne ked sa prechadzaju atributy tak pokial je hodnota true, pouzije sa
key ako value API #2
Nabuduce poprosim torchu menej zbehlosti v nahlasovani chyb, ked o chybu ani nejde ;)
- MIKI
- Člen | 34
westrem napsal(a):
Nabuduce poprosim torchu menej zbehlosti v nahlasovani chyb, ked o chybu ani nejde ;)
Jasne, poucim sa a budem sa snazit byt trpezlivejsi :)
setHtmlId() uz funguje, vdaka.
setClass() som si vcera prezeral este par krat. Ani teoreticky som neprisiel na to, ako to jednoducho vyriesit bez wrappers, aby sa zachovala povodna funkcnost. V principe to nie je dolezite.
Ospravedlnujem sa, prehnal som to s chybou, poprosim o lock :)
- David Grudl
- Nette Core | 8220
CSS třídy tam přidává (tj. nepřepisuje) ConventionalRenderer a je to
konfigurovatelné přes pole wrappers. Takže zrušit třídu text
lze třeba takto:
$form->renderer->wrappers['control']['.text'] = NULL;
Nebo tak lze nastavit jinou třídu.
Renderer to tak dělá z historických důvodů kvůli IE6, kde nebylo jinak možné inputy nastylovat. V dnešní době používá IE6 cca 5 % uživatelů a proto bude automatické oklasování v nové verzi Nette vypnuto. Tj. půjde zapnout, ale ve výchozím nastavení bude vypnuto.