[2010–01–10] přepisování createComponent()
- David Grudl
- Nette Core | 8218
Zatímco metody createComponentXyz()
mohou vytvořenou
komponentu vracet přes return, mateřská createComponent
ji musí
připojit a return není podporováno. Respektive nebylo, od aktuální revize
už je.
Nicméně toto vylepšení může být zpětně nekompatibilní. Pokud vytváříte vlastní createComponent() ve které voláte předka, přidejte prosím „return“ do svého kódu:
function createComponent($name)
{
...
return parent::createComponent($name); // musí tu být return!
}
- Jan Tvrdík
- Nette guru | 2595
Takhle je to logičtější.
Ještě by to chtělo odstranit pokud vím nikým nereportovaný bug, kdy
nejde odstranit (removeComponent
) komponenta tvořená
továrničkou.
- Ondřej Mirtes
- Člen | 1536
Já bych udělal něco s tou velikostí písmen – vím, že se to už
jednou měnilo, ale createComponentComponentName
+
{control componentName}
má hodně velký WTF faktor a lidi v tom
neustále chybují. Navíc to jde proti tomu, kdy názvy tříd začínají
velkým písmenem – název komponenty by podle měl také začínat,
přecijen je to něco „víc“ než jen nějaká proměnná nebo členská
metoda.
- jasir
- Člen | 746
Ondřej Mirtes napsal(a):
Já bych udělal něco s tou velikostí písmen – vím, že se to už jednou měnilo, ale
createComponentComponentName
+{control componentName}
má hodně velký WTF faktor a lidi v tom neustále chybují. Navíc to jde proti tomu, kdy názvy tříd začínají velkým písmenem – název komponenty by podle měl také začínat, přecijen je to něco „víc“ než jen nějaká proměnná nebo členská metoda.
Určitě jsem pro, také na to často musím zbytečně myslet. Myslím, že tu na fóru padl někde návrh aby jméno bylo case-sensitive kromě prvního písmene, které by bylo case-insensitive'.
- Petr Motejlek
- Člen | 293
Mě osobně zase naprosto vyhovuje současný stav. Velké písmeno na začátku názvu je vyhrazené pro třídy a nedovedu si představit psát {control MyComponent} – od toho bych totiž očekával, že by to vždycky vytvořilo novou instanci, připojilo ji do stromu, vyrenderovalo, a poté odpojilo.
- Petr Motejlek
- Člen | 293
Jsem rád, že jsem ten příspěvek napsal dost srozumitelně, aby se s ním někdo ztotožnil. Bylo už docela pozdě (nebo brzo?) a já byl skoro tuhej ;).
- David Grudl
- Nette Core | 8218
Jan Tvrdík napsal(a):
Ještě by to chtělo odstranit pokud vím nikým nereportovaný bug, kdy nejde odstranit (removeComponent
) komponenta tvořená továrničkou.
Můžeš nahodit nějaký příklad?
- Jan Tvrdík
- Nette guru | 2595
David Grudl napsal(a): Můžeš nahodit nějaký příklad?
public function renderDefault()
{
Debug::dump(count($this->getComponents())); // 0
//$testComponent = new AppForm($this, 'test2'); // OK, není použita továrnička
$testComponent = $this->getComponent('test'); // Používá továrničku, nelze odebrat.
Debug::dump(count($this->getComponents())); // 1
$this->removeComponent($testComponent);
Debug::dump(count($this->getComponents())); // 1
$this->terminate();
}
protected function createComponentTest()
{
echo 'Volána metoda: ' . __METHOD__;
return new AppForm();
}
Editoval Jan Tvrdík (20. 1. 2010 18:18)
- David Grudl
- Nette Core | 8218
Jan Tvrdík napsal(a):
Ještě by to chtělo odstranit pokud vím nikým nereportovaný bug, kdy nejde odstranit (
removeComponent
) komponenta tvořená továrničkou.
fixed
- David Grudl
- Nette Core | 8218
Téma sensitive a insensitive se už probíralo mnohokrát a ani nevím, k čemu se vždy došlo ;)
- Vitek Jezek
- hledá kolegy | 285
David Grudl napsal(a):
Téma sensitive a insensitive se už probíralo mnohokrát a ani nevím, k čemu se vždy došlo ;)
Na tusim predminule Posledni sobote jsme se shodli na navrhu aby jméno bylo case-sensitive kromě prvního písmene, které by bylo case-insensitive'. ; )
Coz nic nerika o tom, zda se shodneme i nyni (program na Pardubickou PS?)
- Ondřej Mirtes
- Člen | 1536
case-sensitive kromě prvního písmene, které by bylo case-insensitive
To je ještě míň intuitivnější, než teď.
Kdo by chtěl šmarjá mít dvě komponenty, které by se lišily akorát velikostí písmen?
I když s tím malým písmenem na začátku (jak to funguje teď) to možná není zas až takový průšvih, renderDefault vs. default action je stejná situace a lidi to umí používat…
Editoval Ondřej Mirtes (20. 1. 2010 20:47)
- Honza Marek
- Člen | 1664
Whitek napsal(a):
Na tusim predminule Posledni sobote jsme se shodli na navrhu aby jméno bylo case-sensitive kromě prvního písmene, které by bylo case-insensitive'. ; )
Což je taková kravina, že jsem se na tom nikdy neshodl a nikdy neshodnu ;-)
- David Grudl
- Nette Core | 8218
Buď to dát case-insensitive nebo nechat case-sensitive, všechno ostatní je zm[ae]tek.
Implementace je vcelku snadná a ale může to mít vedlejší efekty:
- programátor musí v metodě
createComponent($name)
také počítat s nerozlišováním velikosti písmen metodaodvolávám, tohle samozřejmě může getComponents() řešit.getComponents()
bude vracet klíče lowercased, takže třeba iterátoryforeach(getComponents() as $name => $control)
chce nahradit zaforeach(getComponents() as $control) { $name = $control->name; ...
Ale stále zůstává otázka: fakt to chceme? Proměnné a klíče polí jsou stejně case-sensitive.
- Ondřej Mirtes
- Člen | 1536
Já narážel na to, že střídání velikosti písmen v názvu komponenty v tovární metodě a ve widget makru je neintuitivní a spousta lidí s tím má problémy. Ale když vezmu vpotaz, že Nette je tím prorostlé víc (název action/render metod + název samotné action a její šablony), tak bych to asi nechal tak, jak je to teď.
- Honza Marek
- Člen | 1664
David Grudl napsal(a):
Buď to dát case-insensitive nebo nechat case-sensitive, všechno ostatní je zm[ae]tek.
Implementace je vcelku snadná a ale může to mít vedlejší efekty:
- programátor musí v metodě
createComponent($name)
také počítat s nerozlišováním velikosti písmen- metoda
getComponents()
bude vracet klíče lowercased, takže třeba iterátoryforeach(getComponents() as $name => $control)
chce nahradit zaforeach(getComponents() as $control) { $name = $control->name; ...
Ale stále zůstává otázka: fakt to chceme? Proměnné a klíče polí jsou stejně case-sensitive.
My chceme, aby jméno komponenty a jméno komponenty ve stromu komponent byla jiná hodnota?
Osobně mi nevadí současný stav. I když kdysi jsem žil v domnění, že hodnoty jsou case-insensitive a taky jsem byl spokojen. Při zjištění pravdy jsem byl velmi překvapen :D
- David Grudl
- Nette Core | 8218
Jméno komponenty uvnitř ComponentContainer je implementační záležitost, jen prostě metody ComponentContainer budou fungovat case-insensitive, ačkoliv jména komponent mohou používat velké i malé písmenka. Nedělal bych to tak že se jméno komponenty automaticky změní na malá písmenka, to by mělo daleko větší důsledky.
- PetrP
- Člen | 587
Prvni pismeno case-senzitive,
druhe case-insenzitive,
třeti pismeno nesmy byt cislo,,
čtvrté musi bejt mezi c a f.
páte se musí rýmovat z druhým, ale může mít jinou velikost.
šesté musí bejt vždy Q
od sedmého do osmého musí být mezery.
deváte může být jakékoli ale nesmý se zapomenout vyplnit.
jedenáctě zase vždy malé.
od dvanáctého dál jsou povoleny jen malé písmena s interpunkcí.
Jinak jsem zastáncem case-insenzitivy, ale můžem se poprat na PS. ;]