Komponenty – nepřiliš jasné využití ne zcela běžných metod
- Klobás
- Člen | 113
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
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 | 2666
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
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ě?
- David Grudl
- Nette Core | 8239
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?