Flash zprávičky odesílané ajaxem

Upozornění: Tohle vlákno je hodně staré a informace nemusí být platné pro současné Nette.
ic
Člen | 430
+
0
-

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
+
0
-

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
+
0
-

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
+
0
-

a ukaz, jak mas sablonu s flash messagema. nemas to treba v nejake inkludovane sablone?

ic
Člen | 430
+
0
-

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
+
+2
-

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

ic
Člen | 430
+
0
-

proštuduju si to