getComponent hlásí component already exist

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

Používám getComponent, kterým si vyhledávám komponentu ve stromu.
na jednom místě mi ale Laděnka vyhodí
Component with name ‚stepform‘ already exists.
Jako by se při vyhledávání pokusila komponentu znovu vytvořit. Můžu si komponentu předat jinak, ale spíš by mě zajímalo proč mi to píše :/

//voláno v jiné komponentě, řádek, který vyhazuje chybu:
$max = $this->presenter->getComponent("stepform")->getNumberOfSteps();
Majkl578
Moderator | 1364
+
0
-

Ukaž továrničku komponenty stepform v presenteru.

Hafran
Člen | 121
+
0
-

Továrnička v presenteru vypadá takhle.

	protected function createComponentStepForm() {
		$stepForm = new \Addons\StepForm();
		$stepForm->addStep('Krok 1', $this->getComponent('form1'));
		$stepForm->addStep('Krok 2', $this->getComponent('form2'));
		$stepForm->addStep('Krok 3', $this->getComponent('form3'));

		return $stepForm;
	}

Ten krok na kterým se to zastaví je v metodě attached

vvoody
Člen | 910
+
0
-

A teraz nám ukáž továrničky pre form1–3

Hafran
Člen | 121
+
0
-

Jde o pokusné třídy, továrničky jsou identické:

	protected function createComponentForm1() {
		return new \Forms\Form1();
	}

	protected function createComponentForm2() {
		return new \Forms\Form2();
	}

	protected function createComponentForm3() {
		return new \Forms\Form3();
	}
vvoody
Člen | 910
+
0
-

Nedávno som tu na fóre videl niečo podobné, vkladanie komponenty do komponentu ktoré majú obe továrničky na rovnakej úrovni (v presenteri). Ved to ani nemôže fungovať. Kde ste k takémuto použitiu prišli?

Hafran
Člen | 121
+
0
-

No já je do sebe nevkládám, jenom je odtamtud volám a zatím ve všech případech to fungovalo. :) Nástřel se získal zde: https://forum.nette.org/…est-practice K presenteru se přece dostanu odkudkoliv, ať sem od něj zanořenej, jak chci hluboko, nebo ne? Jako že to by těm komponentám nemělo vadit.

vvoody
Člen | 910
+
0
-

Je mi to dosť divné keď sa renderuje jedna v druhej a pritom sú na tej istej úrovni v strome. No zrejme im to vôbec nevadí. Nič ma nenapadá k tej vyhodenej výnimke. Skús si to nejako odkrokovať nech vidíš čo sa tam deje.

ViPEr*CZ*
Člen | 817
+
0
-

Hafran napsal(a):

No já je do sebe nevkládám, jenom je odtamtud volám a zatím ve všech případech to fungovalo. :) Nástřel se získal zde: https://forum.nette.org/…est-practice K presenteru se přece dostanu odkudkoliv, ať sem od něj zanořenej, jak chci hluboko, nebo ne? Jako že to by těm komponentám nemělo vadit.

No když to tak sleduju, tak by to možná minimálně mohlo vyhodit jinou chybu. Přeci pokud chci vrátit instanci, tak nemůžu dostat chybu, že už existuje :-) Ano černá magie v případě neexistence zkusí instanci vytvořit, ale v případě neexistence… pak bych stejně asi čekal jinou chybu.