Kdy nastava pripojeni komponenty k presenteru?
- marty666
- Člen | 26
Ahoj mam dotaz ohledne pripojovani komponent k presenteru. Obcas se mi stava, ze dostavam hlasku v podobe „Component … was not attached to …\Presenter“. Kdy presne se pripojuje komponenta k presenteru a naopak? Napriklad:
// kod v presenteru
// zavola se tovarnicka createComponent<Jmeno_komponenty>
$this['jmeno_komponenty']->metoda(...);
// kod v komponente jmeno_komponenty
public function metoda(...) {
$presenter = $this->presenter;
}
Zajima me, jestli budu mit pristup k presenteru v pripade, ze se vytvori
komponenta a hned se na ni zavola nejaka metoda. Protoze, pokud ne, tak jinak
nevim, co muze zpusobovat tu chybu.
Diky za rady.
- japlavaren
- Člen | 404
ahoj,
- komponenta sa vytvara v momente, ked ju zavolas z presenteru $this[kompoennta], alebo sa ma renderovat v sablone {control komponenta}. ak sa nemylim, tak sa vytvara este ked prijma signal – ?do=komponenta-akcia
- pri pripajani k rodicovi (presenteru/inej komponente) sa vola metoda attached()
- komponenta je definitivne pripojena az v metode render()
Hlasku, component was not attached to presenter, dostavas ak sa snazis pracovat s presenterom (alebo pouzivas link ktory vyuziva presenter), pred metodou render. predpokladam ze mas komponentu v komponente a na nej volas $this->presenter, alebo $this->link.
riesenie tvojho problemu je jednoduche – subkomponentu nadefinuj a vsetky operacie na ktore potrebujes presenter rob az v render metode komponenty
Editoval japlavaren (19. 9. 2014 20:25)
- Zax
- Člen | 370
Komponenty se připojí k rodiči po prvním vytvoření, což se děje ve
chvíli, kdy o ni nějak požádáš ({control komponenta}
,
$this['komponenta']
, ?do=komponenta-signal
apod.).
- Když požádáš o komponentu, zavolá se metoda getComponent(‚komponenta‘).
- Metoda getComponent se koukne, jestli je komponenta vytvořená, pokud není, tak zavolá createComponent(‚komponenta‘).
- Metoda createComponent zavolá továrnu createComponentKomponenta().
- Metoda getComponent má tedy novou komponentu, tak se ještě koukne, jestli je připojená a pokud není, tak ji připojí – zavolá addComponent.
- Metoda addComponent zavolá setParent na vytvořené komponentě a setParent pak (zjednodušeně) zavolá metodu attached.
Uvnitř továrny (createComponentKomponenta) komponenta obvykle není
připojena (ale nic nebrání si ji ručně připojit), ale když si pak
vytáhneš instanci někde mimo tu továrnu ($this['komponenta']
),
tak už ji budeš mít připojenou.
https://api.nette.org/…ner.php.html#140
Editoval Zax (19. 9. 2014 21:41)
- Šaman
- Člen | 2666
japlavaren napsal(a):
ahoj,
- komponenta sa vytvara v momente, ked ju zavolas z presenteru $this[kompoennta], alebo sa ma renderovat v sablone {control komponenta}. ak sa nemylim, tak sa vytvara este ked prijma signal – ?do=komponenta-akcia
- pri pripajani k rodicovi (presenteru/inej komponente) sa vola metoda attached()
- komponenta je definitivne pripojena az v metode render()
Hlasku, component was not attached to presenter, dostavas ak sa snazis pracovat s presenterom (alebo pouzivas link ktory vyuziva presenter), pred metodou render. predpokladam ze mas komponentu v komponente a na nej volas $this->presenter, alebo $this->link.
riesenie tvojho problemu je jednoduche – subkomponentu nadefinuj a vsetky operacie na ktore potrebujes presenter rob az v render metode komponenty
Není potřeba čekat na render. Když je komponenta je připojená, zavolá se metoda attached(), svůj kód, ke kterému potřebuješ třeba presenter směřuj do této metody. V render už pak samozřejmě je připojená taky.