Dynamické snippety při rewrite kontejneru nereagují
- Spectator
- Člen | 48
Ahoj,
při použití dyn. snippetů chápu že:
- Je nutné dynamické snippety obalit nějakým, statickým a ten překreslovat v příkladu usersList
- pro nepřenášení zbytečně všech prvků stačí poslat jediný a při použití nette.ajax.js a data-ajax-append=„true“ na kontejneru vyvolat pouze append tohoto prvku.
- proměnnou pro template s uživateli je potřeba vytvořit v handle a v render metodě jen kontrolovat obsah a případně doplnit full seznamem – životní cyklus …
Proč tedy nefunguje toto kód níže
Primitivně tam přidám pomocí add! random záznam a překreslím last update
snippet a kontejner dyn. snippetů. lastUpdate se obnoví, seznam je mrtvý.
Co je podle mne špatně je response JSON viz dole. Podle mne by měl obsahovat
obsah snippetu usersList s jedním prvkem. Nějak v tom nevidím ten problém.
Chápu je se to určitě opakuje po sté, ale nevidím to.
<div id="content">
<span>
<a class="ajax" n:href="add!">Add random user</a>
</span>
<br>
<span>
Last update: <span n:snippet="lastUpdate">{$lastUpdate}</span>
</span>
{*<div n:snippet="listContainer">*}
<ul n:snippet="usersList" data-ajax-append="true">
<li n:foreach=" $users as $userItem" n:snippet="user-$userItem->user_id">
<strong>{$userItem->first_name}</strong>: {$userItem->modified_date->format("d.m.Y H:i:s")}
<a class="ajax" n:href="update! $userItem->user_id">update</a>
<a class="ajax" n:href="remove! $userItem->user_id">delete</a>
</li>
</ul>
{*</div>*}
public function renderDefault()
{
if (!isset($this->template->users)) {
$this->template->users = $this->context->table('user');
}
$this->template->lastUpdate = (new \DateTime())->format('H:i:s');
}
public function handleAdd()
{
$this->context->table('user')->insert([...]);
$id = $this->context->getInsertId();
$this->template->users = [$this->context->table('user')->get($id)];
$this->redrawControl('lastUpdate');
$this->redrawControl('usersList');
// $this->redrawControl('listContainer');
}
Response
{"state":[],"snippets":{"snippet--lastUpdate":"08:49:24","snippet--user-183":"\t\t\t\t\t\t<strong>first_name - 472</strong>: 18.06.2017 08:49:24\n\t\t\t\t\t\t<a class=\"ajax\" href=\"/?id=183&do=update\">update</a>\n\t\t\t\t\t\t<a class=\"ajax\" href=\"/?id=183&do=remove\">delete</a>\n"}}
Editoval Spectator (18. 6. 2017 10:31)
- David Matějka
- Moderator | 6445
Ahoj, ta response je spravna. potiz bude v tom, ze to neni kompatibilni s data-ajax-append.
Dynamicke snipety slouzeji k aktualizaci obsahu stavajicich snippetu, ne pro pridavani novych. v tvem pripade by tedy melo stacit smazat v sablone ten dynamicky snippet ` n:snippet=„user-$userItem->user_id“`