Komponenty – nepřiliš jasné využití ne zcela běžných metod

Klobás
Člen | 113
+
0
-

Ahoj,

zcela ještě moc nechápu na co bys mi u komponent hodila metoda

attached
loadState
SaveState

vím, že attached je jako k rozpoznání kdy se komponenta přicvakla k rodiči, ale nevím kdy a jak to můžu a potřebuji využít.
Mohl by mi někdo ukázat jednoduchý, ale skutečně jednoduchý případ, kdy bych se bez attached neobešel?

Co se týká loadState a saveState, ty nejsou v dokumentaci popsány snad vůbec a nerozumím jejich použití a využití (opět příklad nebo popis?)

Moc děkuji.

o metodách monitor (či snad lookup) radši nemluvím :-)

duke
Člen | 650
+
+3
-

Příklad využití metody attached je přímo v Nette zde. (Jde o to, že při připojení upload inputu k formuláři, se nastavuje objektu formuláře enctype na 'multipart/form-data' a ověřuje se, zda je metoda formuláře nastavena na 'post'.)

Metoda loadState(array $params) načítá hodnoty persistentních parametrů komponenty z poskytnutého pole. Hodí se např., když je třeba změnit persistentní parametry komponenty v handle metodě nějakého signálu, aby bylo možné pracovat s již aktualizovaným url. Tj. např. aby se ve snippetu generovaly aktuální odkazy (obsahující tyto persistentní parametry již s novými hodnotami).

Metoda saveState(array & $params) exportuje persistentní parametry komponenty do odkazovaného pole. Případ vlastního využití mě teď nenapadá, ale interně je používána v Nette v rámci sestavování odkazů.

Šaman
Člen | 2634
+
+2
-

attached() můžeš chápat jako odložený konstruktor. Když se provádí běžný konstruktor, ještě není komponenta připojená do stromu komponent (nemá třeba $this->presenter). Poté, co se připojí, tak proběhne metoda attached(), ve které už k presenteru můžeš přistupovat (třeba si u něj zaregistrovat nějaké události). Na druhou stranu, stejně jako konstruktor, se kód provede jen jednou a před tím, než se komponenta vykreslí, nebo než se bude volat nějaký další její kód (pokud ji připojuješ korektně).

Editoval Šaman (18. 3. 2018 15:37)

Klobás
Člen | 113
+
0
-

duke, díky za moc pěkný a dlouhý popis, vůbec mě nenapadá na co bych to měl použít, nicméně, uložím si to :-)

Šaman (odložený konstruktor se bude dobře pamatovat), takže když potřebuju v render nebo handle metody komponenty použít něco z rodiče (většinou presenter), tak to udělám v attached, tam si mohu presenter poznamenat do privátní proměnné a poté to použít i v render či handle metodě?

CZechBoY
Člen | 3608
+
0
-

Spis kdyz potrebujes co nejdrive pouzit presenter tak to udelas v attached, ale od nette 2.4 by mela byt k dispozici udalost onPresenter takze ta metoda uz nema moc smysl v potomcich.
V render metode uz volas klasicky $this->getPresenter()

David Grudl
Nette Core | 8116
+
0
-

attached je vysvětleno v dokumentaci, loadState a saveState ukázáno v examples, ale v dokumentaci opravdu chybí. Nechtěl byste se někdo chopit doplnění docky?