Naja snippet cache první pokus

- Teapack666
 - Člen | 9
 
Zdravím, mám „snad“ jednoduchou otázku ohledně naja.js.
Chtěl bych, aby mi po refreshi stránky a nebo kroku zpět v historii
zobrazilo snippet v podobě v jaké se byl před akcí…
Příklad:
Mám stránku s aktuálními akcemi v kalendáři. Tlačítkem „Historie“
volám ajaxově handle signálu a překreslím snippet na akce historické. Vše
funguje, jen bych chtěl aby při refreshi stránky, zůstal snippet překreslen
na „historie“, to stejné pokud si zobrazím nějakou akci z historie,
přejdu na akci „AKCE:Detail“ a pak se vrátím zpět v prohlížeči.
Pochopil jsem, že toto vyřeším přes Naju a její history snippet cache, ale
za boha se nemohu dobrat k výsledku. Dle dokumentace a videonávodu
z youtube, to vše vypadalo jako brnkačka, ale asi vůbec netuším.
šablona
<div n:snippet="shows">
    <div class="row justify-content-center px-1 my-3" id="actions">
        <div class="col-12 col-md-8 content">
        	{foreach $shows as $show}
                        ....Výpis dat
            {/foreach}
        </div>
    </div>
    {if $actualShows == 1}
        <div class="row justify-content-center">
            <a n:href="showHistory!" type="button" class="ajax btn btn-success col-6 col-md-1" data-naja-history="replace">Co už je za námi</a>
        </div>
    {/if}
</div>
Presenter
	public function beforeRender(): void {
        $this->redrawControl("shows");
    }
	public function actionDefault() {
        $this->template->shows = $this->showsModel->getShows($pastShows = false);
    }
    public function handleShowHistory() {
        if ($this->isAjax()) {
            $this->template->actualShows = 0;
            $this->template->shows = $this->showsModel->getShows($pastShows = true);
            $this->redrawControl("shows");
            $this->payload->postGet= true;
            $this->payload->url = $this->link('this');
        } else {
            $this->redirect('this');
        }
    }
Při kontrole response ajax requestu jsou ve snippet–shows správná data.
Jak tedy docílit, aby se při obnově stránky překreslili znovu jako
ShowHistory ?? Nikde mi z logiky nevychází, jak a kdy by k tomu mělo
dojít.
Bude mnou požadovaná funkčnost nějak zprovoznitelná nebo jsem to vše
špatně pochopil ?
Díky za konstruktivní rady a nějaké lehké popostrčení směr výsledek.

- jiri.pudil
 - Nette Blogger | 1034
 
Ahoj, když obnovíš stránku, browser obejde jakýkoliv JS a prostě pošle
přímý, ne-ajaxový request na tu URL, kterou má v adresním řádku.
V tvém případě bude (díky $this->link('this') v postGetu)
ta URL vždycky stejná a povede na actionDefault. Pokud chceš
stav stránky zachovat i po jejím obnovení (nebo třeba nasdílení URL
kamarádovi), pak musí být ten stav součástí URL – a tedy i parametrem
metody actionDefault.
Píšu z hlavy, ale asi by ten odkaz dost možná neměl mít
data-naja-history="replace" (to slije aktuální a uplynulé
události zdánlivě do stejného requestu/URL, což myslím nechceš) a měl by
spíš směřovat na:
<a n:href="this, showHistory: true" ...>
a v presenteru:
public function actionDefault(bool $showHistory = false) {
    $this->template->shows = $this->showsModel->getShows($showHistory);
    if ($this->isAjax()) {
        $this->redrawControl('shows');
    }
}