existuje moznost, aby hanler volal javascript?

vlkodlak
Člen | 160
+
0
-

zdravím ve spolek

existuje možnost jak z javascriptu zavolám handlerXXX

například zde pomoci jQuery zachytím akci na web stránce a pomoci nette ajaxu odešlu požadavek do handleruSaveWeekdatatime, který spustí výpočet a pak pomoci payloudu vrátí výsledek do nette ajaxu k dokončeni procesu

....
	 $.nette.ajax({
	    type: 'post',
	    url: '?do=saveWeekdatatime',
	    data: {
		  WeekDate: ..... ,
		  TaskName: ....,
	       }
	    },
	    success: function (payload) {
	       var myarray = JSON.parse(payload['myresult']);
			....
	       }
	    },
	    error: function (jqXHR, textStatus, errorThrown) {
	    }
....

a má otázka zda je možnost jak z handleru definovaném v pravě probihájícim procesu zavolat funkci javascriptu s parametrem? Například XZY(„test“), která upavi kus stránky napřiklad zobrazí spinner a pak ho schová … jQuery odebere a pak přidá třidu „hide“

	 <div id="ajax-spinner" class="spinner hide">
	    <span class="sr-only">Loading...</span>
	 </div>

respektive lze řešit jinak? snippet?

Kamil Valenta
Člen | 756
+
+1
-

JS se spustí čímkoliv, co se vyrenderuje do prohlížeče, takže ano, stačí překreslit snippet, který bude požadovaný JS obsahovat.

dakur
Člen | 493
+
+4
-

@vlkodlak Moc tomu nerozumím. Pokud potřebuješ překreslit kus HTML po zpracování handle, můžeš k tomu využít redrawControl() a snippety. Pokud potřebuješ vykonat nějakou akci v JS po zpracování requestu, prostě to přidáš do success/error callbacku. Nebo jsi to myslel ještě jinak?

Pozor, že v případě prvním, pokud jsi měl na překreslené DOM elementy navěšené nějaké listenery, tak je potřeba je tam navěsit znovu, protože snippet redraw je zruší.

Kcko
Člen | 465
+
+2
-

dakur napsal(a):

@vlkodlak Moc tomu nerozumím. Pokud potřebuješ překreslit kus HTML po zpracování handle, můžeš k tomu využít redrawControl() a snippety. Pokud potřebuješ vykonat nějakou akci v JS po zpracování requestu, prostě to přidáš do success/error callbacku. Nebo jsi to myslel ještě jinak?

Pozor, že v případě prvním, pokud jsi měl na překreslené DOM elementy navěšené nějaké listenery, tak je potřeba je tam navěsit znovu, protože snippet redraw je zruší.

Nebo je navěsit na rodičovský element.

vlkodlak
Člen | 160
+
0
-

@KamilValenta – preci jen chci uchovat „cisty kod“ a javascript mit schovany mimo sablony
@dakur – ano, to jedna z možnosti, jen jsem se „zasekl“ jak reknu snippet aby vynechal / pridal do tridy „hide“?
@kcko – prosím o lepsi napovedu

@all
mozna opisi svou otazku jinak
mam kok v sablone

	 <div id="ajax-spinner" class="spinner hide">
	    <span class="sr-only">Loading...</span>
	 </div>

který obalim snipetem a prekreslim zavolanim funkce redrawControl, což je celkem elegantni (dekuji @dakur) ale jak predam zda trida „hide“ ma byt ci ne? lze redrawControl zavolat s parametrem resp predat sablone $this->template->zobraz = ‚hide‘;

a kus kodu upravit

	 <div id="ajax-spinner" class="spinner {$zobraz}">
	    <span class="sr-only">Loading...</span>
	 </div>
vlkodlak
Člen | 160
+
0
-

@all dekuji vsem za snahu pomoc, pravdepodobne reseni je popsane zde https://doc.nette.org/…ication/ajax#…
zaroven je to co popisoval @dakur zde https://forum.nette.org/…h-parameters

dakur
Člen | 493
+
+1
-

Ano, je to jak píšeš, v šabloně i při redrawControl() můžeš pracovat z proměnnýma z presenteru. Takže např.:

public function renderDefault(): void
{
	$this->template->hideSpinner = $this->isAjax(); // nebo jiná logika
}
<div id="ajax-spinner" n:class="spinner, $hideSpinner ? hide">
	<span class="sr-only">Loading...</span>
</div>