nette vs ajax: jak spravne invalidovat?

vlkodlak
Člen | 175
+
0
-

zdravím,

možná nesprávně rozumím věci, ale má očekávaní pokud na stránce mám snippet a php time provedu jednoduché navýšení počitadla a invalidaci toho snippetu tak změní se pouze počitadlo nikoliv značka time()

chápu když dam refreš cele stránky tak time se mi změní, ale když dam navýšit jen počitadlo se má změnit jen počitadlo?

defaul.latte

{block content}

<p>This is an AJAX counter. <a class="ajax" n:href="count!">Click here!</a></p>

{snippet pocitadlo}
   <p><strong>{$counter}</strong></p>
{/snippet}


time {$cas}

homepresenter.php

namespace App\Presenters;

use Nette;

final class HomepagePresenter extends Nette\Application\UI\Presenter
{

   /** @persistent */
   public $counter = 0;

   public function handleCount()
   {
      $this->template->counter = $this->counter++;

      if ($this->isAjax())
      {
	     $this->redrawControl('pocitadlo');
      }
   }

   public function renderDefault()
   {
      $this->template->counter = $this->counter;
	  $this->template->cas = time();
   }

}

Editoval vlkodlak (28. 4. 2021 1:35)

David Matějka
Moderator | 6445
+
0
-

chápu když dam refreš cele stránky tak time se mi změní, ale když dam navýšit jen počitadlo se má změnit jen počitadlo?

ano, přesně tak. při tom ajaxovém požadavku vrátí server akorát tu část uvnitř invalidovaného snippetu.

O tom, jak snippety fungují, jaké jsou tam problémy atd, jsem mluvil před pár lety na posobotě: https://www.youtube.com/watch?…

Ondřej Kubíček
Člen | 494
+
0
-

samozřejmě, že jen počítadlo, protože je obalene v tom snippetu „pocitadlo“ a to překresluješ. Jinak moc nechápu co je za problém, pokud chceš překreslovat i $cas, dej ho do toho snippetu, připadně do jiného a překresluj i ten

vlkodlak
Člen | 175
+
0
-

David Matějka napsal(a):

chápu když dam refreš cele stránky tak time se mi změní, ale když dam navýšit jen počitadlo se má změnit jen počitadlo?

ano, přesně tak. při tom ajaxovém požadavku vrátí server akorát tu část uvnitř invalidovaného snippetu.

O tom, jak snippety fungují, jaké jsou tam problémy atd, jsem mluvil před pár lety na posobotě: https://www.youtube.com/watch?…

bohužel, přednáška moc ozřejmění nevnesla … proč / jak udělat, aby se po kliku překreslilo jen počitadlo a ne také i čas

vlkodlak
Člen | 175
+
0
-

Ondřej Kubíček napsal(a):

samozřejmě, že jen počítadlo, protože je obalene v tom snippetu „pocitadlo“ a to překresluješ. Jinak moc nechápu co je za problém, pokud chceš překreslovat i $cas, dej ho do toho snippetu, připadně do jiného a překresluj i ten

to je to, že na stránce je snippet u počitadla a zobrazení casu. když v čase nula kliknu na tlačítko počitadla tak se mi navýší. pak je volán povel překresli, jen ten snippet a zobraz aktuální počitadlo, ale dojde k překreslení i jiného prvku … casu na stránce, který má zůstat ve výchozím zobrazení tj „case nula“. Jak dosáhnout navýšení jen počitadla a ne změny hodnoty času na stránce?

vlkodlak
Člen | 175
+
0
-

Felix napsal(a):

Treba by ti mohla pomoc ukazka.

děkuji dle ukázky to vypadá, že by to mohlo byt ono

David Matějka
Moderator | 6445
+
0
-

A opravdu se ti ten request provádí ajaxem? Máš jej správně inicializovaný?

vlkodlak
Člen | 175
+
0
-

David Matějka napsal(a):

A opravdu se ti ten request provádí ajaxem? Máš jej správně inicializovaný?

teď si připadám hloupě … jak to, prosím, ověřím / zjistím, že opravdu to provádím ajaxem?

Keeehi
Člen | 36
+
+1
-

Vývojářské nástroje > Karta Síť/Network > Provedeš požadavek > Objeví se v seznamu > Koukneš do sloupce Typ/Type > Pokud je tam document ⇒ normální požadavek, xhr ⇒ ajax.