Po invalidaci Control potomka se neinvaliduje rodič
- vasek125
- Člen | 34
Ahoj. Do presenteru mám připojenu jednu komponentu pro zobrazení uživatelů a do této komponenty mám připojenou další komponentu pro řazení (VisualPaginator upravený pro ajax). Šablony všech komponent začínají direktivou snippet. Pokud v komponentě pro řazení odchytím pomocí handle signál a invaliduji komponentu ($this->invalidateControl()), pak se znovu vykreslí jen komponenta VisualPaginator, ale její rodič ne. Funguje $this->parent->invalidateControl(), ale podle manuálu by se automaticky měla po invalidaci podřízené komponenty stát invalidní i nadřízená. Proč tomu tak není? A co mám kde nastavit aby tomu tak bylo?
- duke
- Člen | 650
vasek125 napsal:
Ahoj. Do presenteru mám připojenu jednu komponentu pro zobrazení uživatelů a do této komponenty mám připojenou další komponentu pro řazení (VisualPaginator upravený pro ajax). Šablony všech komponent začínají direktivou snippet. Pokud v komponentě pro řazení odchytím pomocí handle signál a invaliduji komponentu (
$this->invalidateControl()
), pak se znovu vykreslí jen komponenta VisualPaginator, ale její rodič ne.
Toto je IMHO správné chování. Kdyby to tak nebylo, invalidace libovolné subkomponenty (či jen jejího snippetu) by v důsledku vedla na překreslení všech nadřazených komponent, což obecně vzato není žádoucí. Např. snippety by pak v podstatě ztratily smysl. Ve speciálních případech, kdy to žádoucí je, toho lze dosáhnout jinak.
Funguje
$this->parent->invalidateControl()
…
Např. takto, i když toto nepovažuji za nejrozumější řešení.
Lepší je např. přidat událost onInvalidate (či konkrétnější) do
komponenty paginátoru a v nadřazené komponentě volat něco jako:
$this['paginator']->onInvalidate[] = callback($this, 'invalidateControl');
…, ale podle manuálu by se automaticky měla po invalidaci podřízené komponenty stát invalidní i nadřízená. Proč tomu tak není? A co mám kde nastavit aby tomu tak bylo?
Invalidní komponenta je komponenta, jejíž část (ne nezbytně ji celou) je třeba překreslit. Tuto definici splňuje, i když se bude překreslovat jen její subkomponenta (např. paginátor), neboť ona subkomponenta je její součástí. Takže manuál je nejspíš v pořádku.