Proč je getParent() zavolaný z komponenty NULL, ale z presenteru vrací hodnotu?

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

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;
    }
}
HappyFace
Člen | 162
+
0
-

componenata nema nieco ako parent je proste includovana do presenteru ak ches v komponente „parent“ co je vlastne presenter tak si zavolaj getPresenter :) .. aspon tak nejeko som to pobral ja z doc.

Šaman
Člen | 2666
+
0
-

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
+
0
-

HappyFace wrote: componenata nema nieco ako parent

Má, k tomu taky ta metoda getParent() je. Viz taky vysvětlení od @Šamana.

HappyFace
Člen | 162
+
0
-

Jan Tvrdík napsal(a):

HappyFace wrote: componenata nema nieco ako parent

Má, k tomu taky ta metoda getParent() je. Viz taky vysvětlení od @Šamana.

mam sa este co ucit :) dik

+
0
-

Š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í :-)