Příklad na planette na dynemické snippety

Upozornění: Tohle vlákno je hodně staré a informace nemusí být platné pro současné Nette.
karelb
Člen | 17
+
0
-

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
+
0
-

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!