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/…n/presenters#…
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.
HomepagePresenter.php
<?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;
}
}
Homepage/default.latte
{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>