ako invalidujem snippet v inom presenteri?
- duskohu
- Člen | 778
Ahojte viete mi poradit?
mam: komponetu ProjectMenu ktoru nacitavam v BasePresenteru a v nej mam hndle
a po vykonani handle potrebujem invalidovat snippet ktrory je v Home
presenteru, komponenta ProjectMenu je stale nacitana lebo ju vykreslujem v
@layout.latte, viete mi poradit ako to riesit?
/** NACITAM KOMPONENTU - Project Menu nacitam v BasePresenter **/
public function createComponentProjectMenu()
{
$projectMenu = new ProjectMenu();
return $projectMenu;
}
/** KOMPONENTA - Project Menu v handle **/
if ($this->presenter->isAjax())
{
$this->invalidateControl('snippetA'); // problem je v tom ze snippetA sa nachadza v HomePresenteri
}
/** HomePresenter sablona.latte **/
{snippet snippetA}
......
{/snippet}
- duskohu
- Člen | 778
pilec napsal(a):
A proč ten snippet není v BasePresenteru když se vykresluje v @layout.latte?
/** HomePresenter sablona.latte **/
{snippet snippetA}
......
{/snippet}
oprava >>$this->HomePresenter->invalidateControl('snippetA'); // invalidujem z komponety BasePresenteru
snippetA je v sablone HomePresenteru >> a komponenta ProjectMenu je v BasePresentru a umiestnena v @layout.latte a ja potrebujem invalidnut snippetA ktory je HomePresentru z komponenty ktora je v BasePresenteru
Editoval duskohu (7. 9. 2012 20:24)
- Vojtěch Dobeš
- Gold Partner | 1316
Presenter je vždycky je jen jeden – ten aktuální. A je v
$this->presenter
v komponentách. Pokud to chápu dobře,
chceš ten snippet invalidovat v kódu komponenty. Tak tam prostě zavolej
$this->presenter->invalidateControl('snippetA');
. Pokud ten
snippet bude v šabloně view (popř. v layoutu) existovat, zinvaliduje se.
Pokud ne, nic to neudělá.
- duskohu
- Člen | 778
22 napsal(a):
toto ti snad nemůže fungovat, aniž by laděnka neřvala:
$this->HomePresenter->invalidateControl('snippetA');
toto jsi četl?
toto bolo len teoreticke, koli prikladu,
Vojtech to pochopil spravne, dakujem velmi pekne, ospravedlnujem sa ze som sa
asi nevyjadril velmi spravne.
Pokial chcem invalidovat z presenteru nieco co je v sablone presentru
$this->invalidateControl();
alebo
$this->presenter->invalidateControl(); // nepouzivat
Pokial chcem invalidovat z presentru nieco co je v sablone komponenty
$this['componenta']->invalidateControl();
Pokial chcem invalidovat z komponenty nieco co je v sablone komponenty
$this->invalidateControl();
Pokial chcem invalidovat z komponenty nieco co je v sablone presentru
$this->presenter->invalidateControl();
je to takto spravne?
Editoval duskohu (10. 9. 2012 15:37)
- Vojtěch Dobeš
- Gold Partner | 1316
duskohu
Jen bych doplnil, že:
$this->presenter->invalidateControl
v presenteru je hnusné a nikdo by to tak psát neměl :)- ty otazníky můžeš smazat, ano je to tak
Teoreticky lze invalidovat i z komponenty jinou komponentu:
$this->presenter['jinaKomponenta']->invalidateControl();
Ale je to strašný antipattern, protože to nechutně komponenty provazuje mezi sebou (a potom už vlastně nejde o žádné standalone komponenty).
Editoval vojtech.dobes (9. 9. 2012 20:08)
- Michal Vyšinský
- Člen | 608
Můj příspěvek jsem smazal. Omlouvám se za moji neznalost. Vždy jsem to používal tak, jak jsem napsal a fungovalo mě to. Takže se ještě jednou omlouvám a díky za poučení.
- tmysik
- Člen | 16
vojtech.dobes napsal(a):
Teoreticky lze invalidovat i z komponenty jinou komponentu:$this->presenter['jinaKomponenta']->invalidateControl();
Ale je to strašný antipattern, protože to nechutně komponenty provazuje mezi sebou (a potom už vlastně nejde o žádné standalone komponenty).
A správně to tedy řešit jak?
- Ascaria
- Člen | 187
tmysik napsal(a):
A správně to tedy řešit jak?
Pokud chceš standalone komponenty, tak jedna druhou přímo měnit nesmí. Pokud přesto chceš z jedný komponenty měnit druhou, je podle mě správné řešení použít eventy a ošetřit je tak, že když na event není navěšený žádný handler, aby se to obešlo i bez toho.
Editoval Ascaria (3. 10. 2012 15:03)