existuje moznost, aby hanler volal javascript?
- vlkodlak
- Člen | 175
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 | 822
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
@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 | 470
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áš dosuccess
/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 | 175
@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 | 175
@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
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>