J'essaie d'emballer javascript try/catch comme on le voit sur http://pastebin.com/f579d999dProblèmes avec jQuery, fn.bind internes/fn.apply sur draggables (en essayant de faire mieux la gestion des exceptions)
Il fonctionne bien, il essentiellement envelopper le tout dans un try/catch vous permet de détecter les erreurs comme ceci:
$.handleErrors(function(e){
console.log("an error occurred");
console.log(e);
});
(et je vais l'afficher au serveur)
Toutefois, cela ne fonctionne pas pour draggables ou resizables (mais pour tout le reste). Si vous commencez à faire glisser/redimensionner un élément, il ne s'arrête pas à la souris (en faisant glisser le curseur pour toujours)
Il semble que le fichier ofn.apply() ne fonctionne pas sur draggable/redimensionnable.
Plus précisément (raccourci):
ofn = fn; wfn = function() { ofn.apply(this, arguments); }; fn = wfn;
Mais pour tous les autres événements.
Bloc de code):
$.fn.bind = function(type, data, fn) { var ofn, wfn; if (!fn && data && $.isFunction(data)) { fn = data; data = undefined; } if (fn && type.indexOf("error") === -1) { ofn = fn; wfn = function() { try { ofn.apply(this, arguments); } catch(e) { handler(e); return false; } }; fn = wfn; } return jbind.call(this, type, data, fn);
Je suis à peu près perdu ici, et je ne peux trouver aucune ressource dire pourquoi cela ne devrait pas travailler (je ne peux même pas trouver quelqu'un qui a les mêmes problèmes)
ma question est la suivante:
- est-ce que la méthode ci-dessus semble être un moyen OK pour attraper les erreurs avec jQuer y
- Quelqu'un at-il connu le même problème (et il fixe)
- Ai-je mal comprendre quelque chose et je devrais tout simplement pas appeler cela sur les événements draggable
Cordialement, Niklas
Mise à jour 2011-08 -28, le code complet (fonctionnement) est maintenant:
jQuery.fn.bind = function(type, data, fn) {
if (!fn && data && typeof data == 'function') {
fn = data;
data = null;
}
if (fn)
{
var origFn = fn;
var wrappedFn = jQuery.proxy(origFn, function() {
try {
origFn.apply(this, arguments);
}catch (ex) {
return trackError(ex);
}
});
fn = wrappedFn;
}
return jQueryBind.call(this, type, data, fn);
};
Si quelqu'un a plus de conseils sur la façon de l'améliorer (la fonction d'origine est de 012.377.) s'il vous plaît laissez-moi savoir dans un commentaire.
J'ai installé une démo sur http://bivald.com/jquerydraggable.html (travail sur clic, ne fonctionne pas sur la traînée) - Je teste tout dans Chrome –