Komponenta nemá továrničku na jinou komponentu a chce si šáhnout na továrničku presenteru
- mcmatak
- Člen | 504
Jak tohle řešíte, jste v šabloně
$control[imageMatcher]
což je komponenta basepresenteru,
takže máte několik možností vytvořit komponentu v každé komponentě co to chcete použít, nebo nastavit továrničku komponenty tak, aby když sama neví, kde to vzít, tak se zeptá presenteru
tohle mi ale nefunguje
<?php
public function createComponent($name)
{
if (isset($this[$name])) {
return $this[$name];
}
elseif (isset($this->presenter[$name])) {
return $this->presenter[$name];
}
}
?>
začalo mi to ignorovat vlastní továrničky
je trochu jasné o co mi jde?
- Filip Procházka
- Moderator | 4668
Co takhle?
public function createComponent($name)
{
if (isset($this[$name])) {
return $this[$name];
} elseif (isset($this->presenter[$name])) {
return $this->presenter[$name];
}
return parent::createComponent($name);
}
Ale nenechám tě spálit se a řeknu ti rovnou, že komponentu nemůžeš
připojit do dvou containerů. Pokud zavoláš nad komponentou dvakrát
->setParent()
, tak ti to selže ;) Čili, tohle nikdy fungovat
nebude :)
Nauč se raději používat Nette\ComponentModel\Component::lookup() a Nette\ComponentModel\Container::getComponents()
Editoval HosipLan (24. 10. 2011 11:06)
- Filip Procházka
- Moderator | 4668
Teď mě napadá, tohle je hovadina
public function createComponent($name)
{
if (isset($this[$name])) {
return $this[$name];
protože $this[$name]
volá
$this->getComponent($name)
a ta ji vytváří pomocí
$this->createComponent($name)
, to by se ti mělo
zacyklit ne?
A pak tohle:
public function createComponent($name)
{
if (isset($this->presenter[$name])) {
return $this->presenter[$name];
To ti zkusí vytvořit komponentu v presenteru (tím ji připojí do presenteru) a pak ji zkoušíš znovu připojit v té komponentě ⇒ připojuješ 2× ⇒ umře to.
- mcmatak
- Člen | 504
no právě to jsem psal,
getComponent nevím proč ale ignorovalo to, rovnou to spouštělo createComponent, hmm, aha to by asi nejdříve mělo udělat test
parent::createComponent
a když existuje tak vrátit a ne dělat set
a když neexistuje tak třeba ten presenter, ale tam je zase to dvojí připojení :( hm
no dobrá takže závěr je že v šabloně budu používat
$control->presenter[‚imageMatcher‘]
a je to vyřešeno, ať to dám kamkoli najde si to nejbližší presenter, kde je to ok