Souvisí netteForms.js s AJAXovým zpracováním formuláře?

Šaman
Člen | 2634
+
0
-

Souvisí nějak netteForms.js s AJAXovým zpracováním formuláře? Konkrétně při zpracování chyb.
Mám formulář, zajaxuji ho a všechno vypadá funkční, odesílá se ajaxem a při chybě se zastaví zpracování a vyskočí alert.
A právě ten alert se mi nelíbil, tak jsem přestal načítat netteForms.js a formuláři jsem přidal atribut 'novalidate' => 'novalidate', takže veškerá validace probíhá jen na serveru.

Problém je, že v obsluze události onError je isAjax() === FALSE, takže se mi překreslí celé okno. Při úspěšném odeslání je to v pohodě, formulář se zpracuje ajaxově.

Napadlo mě tedy, jestli při tom zpracování chyby nějak neasistuje právě ten nenačtený script. Sice to v tom kódu nevidím, ale s JS nejsme kamarádi, tak se radši ptám.

Šaman
Člen | 2634
+
0
-

Au! Tak ano, závislost tam je, na což už pár lidí narazilo.

Musím říct, že je to docela zrada, zvlášť když nette.forms.js ignorují atribut novalidate nette.ajax.js ignoruje atribut novalidate přesto, že samotné nette.forms.js ho zohledňují.

Řešení jsou dvě. První je popsané v tom druhém odkazu výše. Pokud opravdu nechcete používat nette.forms, tak si upravte inicializaci ajaxu takto:

$(function () {
	Nette={};
	$.nette.init();
});

Při zkoumání tohoto problému jsem si ale všiml že nette.forms jsou nutné i pro togglování a že samy o sobě ctí novalidate a navíc jak je vidět, některé knihovny s nimi tiše počítají. Takže je můžeme nechat přilinkované, ale v konfiguraci nette.ajax vypneme validaci formulářů. Buď pro konkrétní odesílací tlačítko:

{input ok, class=>'ajax', data-ajax-validate=>'{"form":false}'}

Nebo globálně:

$(function () {
	$.nette.ext('validation').defaults.form = false;
	$.nette.init();
});

P.S. Netestoval jsem to úplně do hloubky, takže nevím jak to bude fungovat s togglováním a podobnými srandičkami. Ale na mém projektu to funguje.


A ještě by mě zajímalo, jak se v nette.ajax.js upravuje objekt setting? Jde to nějak globálně, nebo pro každou extension zvlášť? Asi to bude primitivní, ale já a Ajax střídáme válečný stav a opatrné příměří. Takže žádná sláva…