nette.ajax.js – různé formuláře, různé zpracování
- tomees
- Člen | 59
Ahoj, řeším toho teď ohledně ajaxu víc a dřív jsem ho moc nepoužíval, maximálně na drobnosti, proto teď více dotazů.
Je možné mít ve spojení s nette.ajax.js na stránce
více formulářů a u každého mít např. jinou metodu success? Za
předpokladu že všechny formuláře mají class „ajax“ mohu na základě
něčeho toto u zpracování definovat?
Nebo musím pro každý formulář napsat komplet js na odesílání a na
každý formulář to přidat zvlášť?
Jde mi o to, že po odeslání jednoho formuláře bych třeba rád překreslil nějaké snippety, při odeslání jiného bych třeba zase chtěl jen zavřít modal. Jak to udělat co nejlpépe / nejjednodušeji?
Díky za rady.
- Šaman
- Člen | 2659
Nechápu otázku. Formulář odladíš neajaxově. Jeho zpracování
navěsíš na událost onSuccess
, vše v PHP.
Někde ho vykreslíš v šabloně, to je latte.
Až nakonec ho obalíš snippetem, includneš jQuery
a
nette.ajax.js
, který inicializuješ. Pak, když formuláři
nastavíš třídu ajax
, tak se odešle ajaxově.
Do obsluhy (opět v PHP) jen dopíšeš, že pokud isAjax()
, tak
chceš překreslit snippet namísto redirectu.
Jediný chyták je v tom, že je myslím potřeba přidat toto překreslení
i do onValidate
a onError
. (Validate jen pokud máš
vlastní validaci, ale do onError vždy, protože to může nastat
kdykoliv).
- her-ur
- Člen | 20
@tomees Myslíš zpracování v javascriptu a ne v PHP?
V nette ajax extension dostaneš v parametru ten element a musíš si zkontrolovat, jestli to je opravdu ten, který chceš. Např:
$.nette.ext('my-ext', {
before: function (xhr, settings) {
if (settings.hasOwnProperty('nette') && settings.nette.hasOwnProperty('el')) {
var $el = settings.nette.el;
if ($el.is('.css-class')) {
this.runSuccess = true;
}
}
},
success: function (payload, status, jqXHR, settings) {
if (this.runSuccess) {
// ...
}
}
}, {
runSuccess: false
});
- majky358
- Člen | 37
@tomees
Niečo podobné ako @her-ur , aspoň ja som si napísal také riešenie, podobne možnosť vlastnej extension.
$("#myBtn").bind('onSuccess', function() {
$("#myModal").modal('hide');
});
$.nette.ext({
success: function (payload, status, jqXhr, settings) {
var idSelector = "#" + settings.nette.el.context.id;
$(idSelector).trigger('onSuccess');
}
});
Update snippetov napriklad
if('snippets' in jqXhr) {
var snippets = $.nette.ext('snippets');
snippets.updateSnippets(jqXhr.snippets, false);
}