Volanie komponent a vytváranie názvou

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

Dobrý večer všetkým,
Chcem sa spýtať či to chápem správne, že sa komponenty volajú až v šablone zápisom {control názov} a ešte by som chcel vedieť ako sa tvoria ich názvy. V tom ukážkovom blogu čo je ako príklad to vyzerá šialene. Názov je napríklad createComponentPostForm a volanie je {control postForm}. Prečo sa nepíše iba componentPostForm. A keď sa to volá tak záleží na velkosti písmen, či ako? Mám v tom značný chaos.
Ďakujem za vysvetlenie.

David Matějka
Moderator | 6445
+
0
-

Ano, pokud komponenty neinicializujes rucne (treba volanim $this['someForm'] v presenteru), tak se vytvareji az pri vykreslovani v sablone, pripadne pokud dochazi ke zpracovani signalu (napr. pri odeslani formulare) – pak se komponenta vytvori jiz po action* metode

Komponenty se vytvareji (vzdy) v metode createComponentNazevKomponenty. Pri vykreslovani, nebo kdyz komponentu volas v presenteru, musis mit prvni pismenko male.
takze kdyz mas v sablone {control someForm}, bude nette hledat metodu createComponentSomeForm

amik
Člen | 118
+
0
-

že sa komponenty volajú až v šablone zápisom {control názov}

To záleží. Záleží taky, co myslíš tím, že se komponenta „volá“. Komponenta je reprezentována objektem implementujícím IComponent a vůbec nemusí být vykreslitelná v šabloně, to je až specifický poddruh komponenty – control (potomek BaseControl) – proto to pojmenování „component“ v presenteru a „control“ v šabloně.
Komponenta se z presenteru získává přes array access: $presenter['component_name'] , a pokud je takto získána poprvé, je vytvořena pomocí createComponentNázevKomponenty. Při každém dalším přístupu ke komponentě presenter vrátí již dříve vytvořenou instanci. No a jeden z případů přístupu ke komponentě je vyrenderování v šabloně, kde syntaxí {control název} je komponenta získána z presenteru a vykreslena.

Co se týče dlouhého názvu, určitě smysl má. Název každé metody by měl obsahovat sloveso, protože metoda něco dělá, proto „create“. Mohla by klidně existovat i metoda deleteComponentNázev atd., která by s komponentou na presenteru dělala něco jiného, než že by jí vytvořila.

Čamo
Člen | 798
+
0
-

OK díky moc za vysvetlenie. Nadnes mi stačilo.

Editoval Čamo (12. 4. 2014 22:36)