confirm.ajax.js i pro neajaxové odkazy?
- Šaman
- Člen | 2659
Ahoj, jak mohu použít confirm.ajax.js
z aktuální verze
rozšíření nette.ajax.js
univerzálně? Teď mi to funguje jen
na prvky, které mají třídu ajax.
Můj vlastní script se sice spustí vždy, ale při ajaxových voláních se
mi akce provede na pozadí aniž by to čekalo na odpověď konfirmačního
okénka. (Ať už to navážu přímo, nebo $.nette.ext load
. A
before
mi to nenaváže vůbec.)
/**
* Potvrzení nebezpečných operací.
*/
$.nette.ext({
load: function () {
/**
* Potvrzovací dialog
* @example <a n:href="delete!, $entity->id" data-confirm="Opravdu smazat?">Odstranit</a>
*/
$('a[data-confirm], button[data-confirm], input[data-confirm]').click(function (e) {
var question = $(this).attr('data-confirm');
if (!question) {
question = 'Opravdu?';
}
return confirm(question);
});
}
});
- Šaman
- Člen | 2659
Tak jsem si vytvořil druhý js pro potvrzování akcí. Musel jsem mu ale
upravit podmínku, aby se při ajaxu nezobrazoval dialog dvakrát po sobě. Taky
jsem to musel navěsit pomocí $.nette.ext({ load: function () …
protože mám tato tlačítka ve snippetu. Výsledkem tedy je něco, co
nefunguje buď když zapomenu inicializovat nette.init()
, nebo
zapomenu přilinkovat originální confirm.ajax.js
a použiju
třídu ajax
(která v tu chvíli nedělá nic, jen blokuje můj
confirm dialog). To je na můj vkus trochu moc věcí, které smrdí WTF
momenty.
@VojtěchDobeš : Dá se nějak zjistit, jestli je přilinkovaný a inicializovaný nette.ajax? Nebo jak tenhle soubor upravit, aby pokrýval všechny situace? (Prvek může a nemusí mít třídu ajax, může a nemusí být použité nette.ajax a pokud ano, pak by to mělo fungovat na ajaxové i neajaxové odkazy i v případě, že jsou v překresleném snippetu).
Můj aktuální kód, který používám spolu s
confirm.ajax.js
:
/**
* Potvrzení nebezpečných operací.
*/
$.nette.ext({
load: function () {
/**
* Potvrzovací dialog, který funguje jen na neajaxovbych odkazech a jen když je použito a inicializováno nette.ajax.js
* @example <a n:href="delete!, $entity->id" data-confirm="Opravdu smazat?">Odstranit</a>
*/
$('a[data-confirm]:not(.ajax), button[data-confirm]:not(.ajax),
input[data-confirm]:not(.ajax)').click(function (e) {
var question = $(this).attr('data-confirm');
if (!question) {
question = 'Opravdu?';
}
return confirm(question);
});
}
});
Editoval Šaman (1. 12. 2015 21:00)
- Vojtěch Dobeš
- Gold Partner | 1316
Já bych se asi snažil vyhnout situaci, kdy nevím, jestli je
nette.ajax.js
přilinkovaný nebo ne. Každý kód by měl buď
vědět, že ano, je to závislost, nebo ne, nic takového tu není.