Metoda startup pre komponenty

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

Zdravím, včera som sa dosť vytrápil s jednou kolekciou zanorených komponenta ktoré sa navzájom invalidovali cez ajax a dospel som k záveru, že by sa v komponentách hodila metóda startup, kde by sa dali nastaviť nejaké globálne premenné pre komponentu a jej potomkov. No a hlavne tá metóda by sa mala spúštať aj po zavolaní redrawControl() na každej komponente v hierarchii. Kôli tomu aby každá komponenta mala po ajaxe aktuálne dáta k dispozícii a aby boli aktuálne ak ich predáva ďalším komponentám.

Neviem či je to dobrý nápad, ale v každom prípdade je to nápad tak som to sem napísal. Možno je názov startup trochu zavádzajúci vzhľadom k ajaxu, lebo v presentery sa startup po redrawControl už nespúšta ak sa nemýlim.

Editoval Čamo (11. 10. 2017 11:15)

David Matějka
Moderator | 6445
+
+3
-

podobneho efektu muzes docilit prekrytim metody attached, respektive loadState – ty se volaji hned po pripojeni k presenteru (resp. rodici). problem je (jak jsem povidal v te prednasce, na kterou jsem te odkazoval), ze komponenty se mohou incicializovat v ruznych fazich cyklu presenteru, od inicializace parametru, pres zpracovani signalu nebo az treba pri vykreslovani v sablone. takze „startup“ by byl trochu matouci, jelikoz by clovek ocekaval korelaci s startupem presenteru.

Čamo
Člen | 798
+
0
-

Attached je určený pre event, to by som vynechal.

A ten loadstate by sa ako zachoval v situácii, že nadradená komponenta si v loadstate nastaví nejakú kolekciu do $this->collection a potom ju predá cez create() do nejakej vnorenej komponenty? Dostane vnorená komponenta updatnutú kolekciu po ajaxe? To je to o čo mi ide. Lebo inak si musím v každej továrni na vnorené komponenty aktualizovať dáta z rodiča. A v rodičovi tak isto.

Tak nech sa tá metóda volá afterRedraw() ale mala by sa spustiť aj bez volania redrawcontrol().

PS: Kto mi tam dal to mínusko prosím vás?

Editoval Čamo (11. 10. 2017 12:32)

David Matějka
Moderator | 6445
+
0
-

a nemuze ta tvoje komponenta tu kolekci vybirat az v render? ze by od nadrazene komponenty dostala jen kriteria pripadne nejakou lazy kolekci?

Čamo
Člen | 798
+
0
-

A render sa volá vždy? Čo ak by som pristúpil ku nejakej komponente cez $this[‚A‘][‚B‘][‚C‘]? Vtedy sa tiež zavolá render [‚A‘] a [‚B‘]? Ja v tom mám trochu hokej tak sa pýtam.

Editoval Čamo (11. 10. 2017 13:01)

ali
Člen | 342
+
0
-

@Čamo render se vola pri vykreslovani komponenty

Čamo napsal(a):

Možno je názov startup trochu zavádzajúci vzhľadom k ajaxu, lebo v presentery sa startup po redrawControl už nespúšta ak sa nemýlim.

startup se vola vzdycky, i pri ajax requestu.

Čamo
Člen | 798
+
0
-

ali Je tam napísané že startup sa pri ajaxen nespúšta?

v presentery sa startup po redrawControl už nespúšta

Editoval Čamo (11. 10. 2017 13:26)

Čamo
Člen | 798
+
-6
-

Bože to je až trápne ako sa snažíte mínuskovať tú otázku. Mentalita pieskoviska…