Při používání ajaxu a snippetů je potřeba vědět, že nejdříve proběhne metoda handle*() a až po ní render*() https://doc.nette.org/cs/application/presenters#toc-zivotni-cyklus-presenteru
Metoda render*() tak může vynulovat změny, které ale chcete provést v handle*(). Řešením je v render*() zkontrolovat, jestli už nebyla nějaká proměnná nastavena dříve.
<?php declare(strict_types=1); namespace App\Presenters; use Nette; final class HomepagePresenter extends Nette\Application\UI\Presenter { public $pocet; public function handlePlus(int $pocet){ $this->pocet = $pocet + 1; $this->redrawControl('pocet'); } public function renderDefault(){ if(!$this->pocet){ $this->pocet = 1; } $this->template->pocet = $this->pocet; } }
{block content} {snippet pocet} <div> {$pocet} </div> <a n:href="plus! pocet => $pocet">Zvyš počet</a> {/snippet} <script src="https://unpkg.com/naja@2/dist/Naja.min.js"></script> <script> naja.initialize(); </script>