Flash zprávičky odesílané ajaxem

- ic
- Člen | 431
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 payloadu 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 | 431
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 | 431
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