Invalidace více snippetů v komponentě
- uestla
- Backer | 799
Zdravím.
V šabloně komponenty mám na stejné úrovni (tj. nevnořené do sebe) 2 snippety.
V signálu komponenty se je snažím oba invalidovat, bohužel se ale v JSONu odešle pouze ten první v závislosti na tom, který jako první invaliduji…
komponenta:
class Catalog extends UI\Control
{
/** @persistent int */
public $page = 1;
/** @return void */
function handleMore()
{
$this->page++;
$this->invalidateControl('shows');
$this->invalidateControl('more');
!$this->presenter->isAjax() && $this->redirect('this');
}
}
šablona:
<div n:snippet="shows" data-ajax-append>
{foreach $shows as $show}
{control $control:detail $show}
{/foreach}
</div>
<p n:snippet="more">
<a n:href="more!" class="ajax">More shows</a>
</p>
Jak jsem uvedl výše, tento kód mi v JSONu posílá pouze snippet
shows
.
V čem může být prosím problém?
Nette 2.0.11
- studna
- Člen | 181
Zajímavé. Napadlo mě jen zkusit to následovně, ale jistý si nejsem.
class Catalog extends UI\Control
{
/** @persistent int */
public $page = 1;
/** @return void */
function handleMore()
{
$this->page++;
$this->template->link = $this->link("more!");
$this->invalidateControl('shows');
$this->invalidateControl('more');
!$this->presenter->isAjax() && $this->redirect('this');
}
}
<p n:snippet="more">
<a href="{$link}" class="ajax">More shows</a>
</p>
A nebo nějaký problém s tím persistentním parametrem?
Editoval studna (13. 9. 2013 17:28)
- uestla
- Backer | 799
Rád bych opravil svoje tvrzení:
Ať už invaliduji snippety v jakémkoli pořadí, v JSONu se pošle vždy
ten invalidní, který
je první v šabloně (tj. snippet shows
) – jakoby se po jeho
vykreslení komponenta celá
zvalidnila, kvůli čemuž nedochází k přenesení snippetu
more
:(
Zatím jsem to vyřešil ošklivým workaroundem:
<div n:snippet="shows" data-ajax-append>
{foreach $shows as $show}
{control $control:detail $show}
{/foreach}
{? $control->invalidateControl('more'); }
</div>