AJAX, jquery a snippet v komponentě

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

Zdravím,
moc nevím, jak přesně uvést nadpis pro tohle téma. Jde o to, že mám napsanou komponentu jakéhosi gridu po zobrazování dat v DB. Ta má v sobě stránkování (AJAX), editaci záznamu (odkaz na příslušný presenter) a mazání řádku (AJAX). Teďka přichází na řadu malý háček. Mám šablonu gridu rozdělenou na tři snippety, jeden pro grid, druhy pro stránkování a třetí pro zobrazování flash zpráv komponenty, jejíž div se dá schovat pomocí jquery. A tady je právě kámen úrazu. Flash zpráva se má zavírat pomocí jquery. Skript ale nefunguje, pokud snippet se zprávama invaliduji. Nějak moc nevím, jak do toho. JS mám rozhozený do více souborů, tak si nejsem jistý, jestli mu to nevadí, to ale pravděpodobně asi ne. Díky moc za odpověď.

Vojtěch Dobeš
Gold Partner | 1316
+
0
-

Problém bude v tom, že při invalidaci snippetu se z flash zpráv ztratí nabindovaný callback na skrytí. Po úspěšném Ajaxovém požadavku bude třeba tohle navázání znovu provést.

Pavel Lokvenc
Člen | 7
+
0
-

Jasný :):):) Díky moc. A jestli se můžu ještě zeptat, jde to udělat nějak elegantněji než tak, že dám tomu <a> kus JS přímo do parametru onclick?

Vojtěch Dobeš
Gold Partner | 1316
+
0
-

Určitě :). Neznám konkrétní JS, ale to bindování bych si zapouzdřil do nějaké funkce. A pak ji volal vždy po úspěšném requestu. S nette.ajax.js (promo) to půjde snadno :):

$.nette.ext('closeFlashes', {
	success: function () {
		bindClosingOfFlashMessage();
	}
});
Pavel Lokvenc
Člen | 7
+
0
-

To je přesně ono :). Díky moc za nakopnutí. Budu si pamatovat :)

llook
Člen | 407
+
0
-

.on() umí bindovat i prvky, které ještě ve stránce nejsou:

$("body").on("click", "div.flashes", function() {
	$(this).fadeOut();
});