Flash zprávičky odesílané ajaxem
- ic
- Člen | 430
Zdravím.
Docela jsem se zasekal na problému s tím, že potřebuji po ajaxové akci vypsat pouze flash zprávičku a neobnovovat stránku.
Problém je v tom, že stránka co by měla vracet json data s obsahem snippetu je prázdná.
Zkoušel jsem si dělat nějaký minimalistický příklad z skončil jsem tu tohoto:
public function handlePokus()
{
$this->flashMessage('flash zprávička');
$this->redrawControl();
$this->terminate();
}
Tady bych právě čekal, že mi to vypíše json data, se kterými následně pracuje nějaký javascript, jenže tam nic není. Co jsem opomenul? fakt nevím :(
Když nedám terminate()
tak se flash zprávička vypíše,
jenže se i načte (pro mé potřeby zbytečně) celý html kód stránky.
Pak ještě si můžu vzít $this->template->flashes
,
odeslat do payload
u a ten hned vypsat pomocí
sendPayload();
, a měl bych vlastně to co chci (jen tedy
v payloadu) ale tohle by se mělo dít na příkaz
redrawControl();
automaticky, nebo ne?
předem díky za posunutí správným směrem
- David Matějka
- Moderator | 6445
redrawControl pouze oznaci snippet pro prekresleni. samotne vykresleni snippetu dojde pri zpracovani sablony. zavolanim terminate dojde k ukonceni behu presenteru a k vykresleni sablony vubec nedojde.
Když nedám terminate() tak se flash zprávička vypíše, jenže se i načte (pro mé potřeby zbytečně) celý html kód stránky.
jako ze v odpovedi prijde cele html a ne jen payload se snippety?
- ic
- Člen | 430
David Matějka napsal(a):
…
jako ze v odpovedi prijde cele html a ne jen payload se snippety?
Jo, to bylo přesně ono, ale to jsem vypadá to způsobil já tím
přílišným zjednodušováním. Pokud tam není ta hlavička
X-Requested-With: XMLHttpRequest
tak nette nereaguje na
$this->isAjax()
a vrátí celé html
-ko.
Nicméně ale i když tam je, tak se sice nějaký json vypíše, ale flash zprávičky v něm nejsou:
if ($this->isAjax()) {
$this->flashMessage('flash zprávička');
$this->redrawControl();
//dump($this->isControlInvalid()); // vrací TRUE
//$this->terminate(); // už vím že to sem nepatří :)
} else {
$this->redirect('this');
}
a v odpovědi je jen
{state: {contentEditable: null, locale: "cs", mobile: null}}
flash
zprávičky schází :(
- David Matějka
- Moderator | 6445
a ukaz, jak mas sablonu s flash messagema. nemas to treba v nejake inkludovane sablone?
- ic
- Člen | 430
David Matějka napsal(a):
a ukaz, jak mas sablonu s flash messagema. nemas to treba v nejake inkludovane sablone?
Zase zásah :) moc děkuji za pomoc.
Když dám kód pro falsh zprávičky přímo do @layout.latte
,
tak už funguje.
Ale mít ho v jiném souboru a hned kód přestane fungovat, ani
{include 'components/flashes.latte'}
, ani
{control flashMessages}
nepomáhaly.
Znamená to tedy, že nyní musí flash zprávičky být přímo v layoutu?
- David Matějka
- Moderator | 6445
s inkludovanou sablonou je to known limitation, ktera vsak jde vyresit. viz https://doc.nette.org/…ication/ajax#…
s komponentou by to melo fungovat, jen musis invalidovat tu komponentu a ne presenter