Životní cyklus Controlu?

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

Zdravíčko, existuje něco jako životní cyklus Controlu? Tvořím Control který kromě jiného obsahuje AppForm a netuším ve které chvíli bych ten form měl vytvořit – funkční je to jen když jej vytvořím v konstruktoru, což mě nepříjde příliš košer. Jediné co vypadá pro daný účel použitelně je ComponentContainer::createComponent(), což taky vypadá podezřele ;) Přehlédnul jsem něco nebo to dělám úplně blbě? :)

kravčo
Člen | 721
+
0
-

zaxeeq napsal(a):

Zdravíčko, existuje něco jako životní cyklus Controlu? Tvořím Control který kromě jiného obsahuje AppForm a netuším ve které chvíli bych ten form měl vytvořit – funkční je to jen když jej vytvořím v konstruktoru, což mě nepříjde příliš košer. Jediné co vypadá pro daný účel použitelně je ComponentContainer::createComponent(), což taky vypadá podezřele ;) Přehlédnul jsem něco nebo to dělám úplně blbě? :)

Životný cyklus v podobnom zmysle ako má prezenter nie. Napríklad o zachytenie signálu sa stará prezenter – ten ho odovzdá komponentu (kľudne i samému sebe), ktorý je jeho príjemcom.

Vytvorenie AppFormu v konštruktore je jedna z možností, z hľadiska optimálneho využitia zdrojov je ale ideálna práve tebou spomínaná továrnička createComponent(). Tá vytvorí AppForm len v prípade, že bude potrebný – teda ak ho Control z nejakého dôvodu potrebovať nebude, vôbec sa nebude vytvárať.

Ako inšpiráciu na obsah továrničky ponúkam jeden nedávny príspevok.

zaxeeq
Člen | 17
+
0
-

Super ;) nedošlo mi, že getComponent může sám zavolat createComponent ;) tvoje řešení je perfektní :)

kravčo
Člen | 721
+
0
-

zaxeeq napsal(a):

Super ;) nedošlo mi, že getComponent může sám zavolat createComponent ;) tvoje řešení je perfektní :)

Ďakujem, ale to perfektné riešenie je Davidova zásluha…

V tom príklade bola malá chybka, už je opravená.

David Grudl
Nette Core | 8218
+
0
-

Vlastně i ten Control malý životní cyklus má. V metodách attached() a detached() lze detekovat, kdy byl připojen nebo odpojen od presenteru nebo formuláře.

kravčo
Člen | 721
+
0
-

David Grudl napsal(a):

Vlastně i ten Control malý životní cyklus má. V metodách attached() a detached() lze detekovat, kdy byl připojen nebo odpojen od presenteru nebo formuláře.

To áno, ale tieto metódy považujem skôr za obsluhu udalostí.

Ja to chápem tak, že mám Presenter::run(), ktorý spúšťa cyklus, pričom tento môžu ľubovoľne prelínať udalosti Presenter::attached() a Presenter::detached() v prípadoch, že v metódach cyklu sa pracuje so stromom komponentov.

Tým pádom nemá Control životný cyklus, má len obsluhu udalostí, ktorú Presenter od neho samozrejme dedí.

Edit: vlastne sa divím, prečo sa tie metódy nevolajú onAttach()onDetach()

Editoval kravco (6. 2. 2009 1:28)

David Grudl
Nette Core | 8218
+
0
-

Protože formát onXyz používá Object pro pole handlerů obsluhujících událost, takže by se to pletlo. Kurnik, musím jít spát, za tři hodiny stávám a jdu školit ;)