Proč je getParent() zavolaný z komponenty NULL, ale z presenteru vrací hodnotu?
- stehlikpetr@msn.com
- Člen | 7
Ahoj, mám presenter a komponentu. Komponenta je vytvářena továrničkou v presenteru. Pokud zavolám $this->getParent(); z konstruktoru komponenty, dostanu NULL. Pokud zadám $comp->getParent() z presenteru, dostanu zpět objekt. Vysvětlíte mi proč to tak je?
class Comp extends \Nette\Application\UI\Control
{
public function __construct()
{
parent::__construct();
dump($this->getParent()); // ziskam NULL
}
}
class HomepagePresenter extends BasePresenter
{
public function actionDefault()
{
$comp = $this['comp'];
dump($comp->getParent()); // dumpne presenter
}
protected function createComponentComp()
{
$comp = new Comp();
return $comp;
}
}
- Šaman
- Člen | 2666
V konstruktoru ještě komponenta není napojená na strom komponent,
potažmo presenter. Zkus to v metodě attached()
(ale nezapomeň nejdřív volat parent::attached()), případně později
(render).
Zajímavější to ale bude u vnořených komponent (parent
není vždy presenter, na to použij getPresenter().
Ale také až po připojení, tedy nejdříve v attached:)
Editoval Šaman (28. 10. 2013 1:27)
- Jan Tvrdík
- Nette guru | 2595
HappyFace wrote: componenata nema nieco ako parent
Má, k tomu taky ta metoda getParent()
je. Viz taky
vysvětlení od @Šamana.
- stehlikpetr@msn.com
- Člen | 7
Šaman napsal(a):
V konstruktoru ještě komponenta není napojená na strom komponent, potažmo presenter. Zkus to v metodě attached() (ale nezapomeň nejdřív volat parent::attached()), případně později (render).
Zajímavější to ale bude u vnořených komponent (parent není vždy presenter, na to použij getPresenter(). Ale také až po připojení, tedy nejdříve v attached:)
Díky za perfektní vysvětlení :-)