Jak invalidovat snippet z nadřazené komponenty
- motorcb
- Člen | 552
Zdravim.
Zkouším anketní systém.
Komponenta PollDetail:
PollDetail.latte
{$poll->title}<br>
{snippet}
{control voteForm-$poll->id}
Tipy ostatních: {$poll->countVotes}
{/snippet}
<hr/>
ve které volám komponentu pro hlasování(voteForm):
public function voteFormSubmitted( Form $form )
{
//ulozeni hlasu - to funguje
//ale nevim jak prekreslit snippet o komponentu vys - v PollDetail.latte
if ( !$this->presenter->isAjax() )
{
$this->presenter->flashMessage( "NENI FLASH", 'success' );
$this->redirect( 'this' );
}
else
{
$this->presenter->flashMessage( "AJAX FUNGUJE", 'success' );
$this->invalidateControl();
}
}
Jak z toho kodu zavolam invalidaci snippetu o uroven vys? PollDetail.latte,
který je v komponentě PollDetail ??
Děkuji za rady
- Vojtěch Dobeš
- Gold Partner | 1316
Invalidovat snippety v šabloně o úroveň výš lze takto:
$this->parent->invalidateControl();
- Vojtěch Dobeš
- Gold Partner | 1316
Tak na to je ještě lepší trik :) – vyhledání rodiče daného typu:
$this->lookup('Nette\Application\UI\Control')->invalidateControl();
Pokud je ten Multiplier přímo připojovaný k presenteru (jeho továrnička je v presenteru), vrátí to ten presenter.
Nicméně, měl bych zmínit, že mnohem lepší způsob je obohatit tvoji komponentu o rozhraní alá formuláře, tj. nadefinovat si události a místo tohoto výše uvedeného volání pouze zavolat tu událost. A ten rodič (presenter), který obsahuje továrničku tvojí komponenty, se sám zaregistruje do oněch události, a sám na sobě zavolá tu invalidaci. Je to mnohem hezčí architektura.