Ajax - životní cyklus presenteru

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.

HomepagePresen­ter.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/defau­lt.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>