Příklad na planette na dynemické snippety
- karelb
- Člen | 17
Moc nechápu tento příklad na dynamické snippety
https://doc.nette.org/…mic-snippets
konkrétně
Dynamický snippet znamená v terminologii Latte specifický případ užití makra {snippet}, kdy je v názvu snippetu použita proměnná. Takový snippet se nemůže v šabloně nalézat jen tak kdekoliv – musí být obalen statickým snippetem, tj. obyčejným. Naši šablonu bychom mohli upravit následovně.
{snippet articlesContainer}
<article n:foreach="$articles as $article">
<h2>{$article->title}</h2>
<div class="content">{$article->content}</div>
{snippet article-$article->id}
{if !$article->liked}
<a n:href="like! $article->id" class=ajax>to se mi líbí</a>
{else}
<a n:href="unlike! $article->id" class=ajax>už se mi to nelíbí</a>
{/if}
{/snippet}
</article>
{/snippet}
Každý článek nyní definuje jeden snippet, který má v názvu ID článku. Všechny tyto snippety jsou pak dohromady zabalené jedním snippetem s názvem articlesContainer. Pokud bychom tento obalující snippet opomněli, Latte nás na to upozorní výjimkou.
Zbývá nám doplnit do presenteru invalidaci – stačí zinvalidovat statickou obálku.
public function handleLike($articleId)
{
$this->ratingService->saveLike($articleId, $this->user->id);
if ($this->isAjax()) {
$this->invalidateControl('articlesContainer');
// $this->invalidateControl('article-' . $articleId); -- není potřeba
} else {
$this->redirect('this');
}
}
V příkladu se invaliduje celý velký snippet, který se celý odešle do prohlížeče… k čemu jsou pak ty pidisnippety, když se stejně invaliduje a do prohlížeče pošle celý velký snippet?
- karelb
- Člen | 17
aha, nevadí, našel jsem to tady
https://doc.nette.org/…ication/ajax
dynamické snippety invalidovat nejdou; jsou jenom k tomu, aby se omezilo, co se konkrétně posílá prohlížeči. Fajn!