Uso de la versión de prototipo 1.6.0.2.Funciones de devolución de llamada de prototipo que se saltan excepciones
Tengo un problema común donde se tragan excepciones cuando se lanzan en una función de devolución de llamada, generalmente cuando trato de manejar la respuesta a una llamada Ajax.Request
. Aquí está un ejemplo sencillo:
marcado HTML:
<input type="button" id="myButton" value="Press Me" />
Javascript:
MYSITE = {};
document.observe("dom:loaded", function() {
// Set up our helper object
MYSITE.pageHelper = new MYSITE.PageHelper();
});
MYSITE.PageHelper = function() {
console.log("PageHelper called.");
$("myButton").observe("click", this.makeCall.bindAsEventListener(this));
};
MYSITE.PageHelper.prototype.makeCall = function() {
console.log("Make call.");
new Ajax.Request(
"remoteCall.cfm",
{
method: 'get',
parameters: "",
onComplete: this.handleCallback.bindAsEventListener(this)
});
};
MYSITE.PageHelper.prototype.handleCallback = function(resp) {
console.log("Start callback processing...");
var x = missingVar + "text"; // This line generates an exception...
console.log("Finished callback processing.");
};
OK, por lo que el problema es que si se ejecuta este código en Firefox con Firebug no es una excepción se emitirá para la línea ofensiva: es tragada. Trago. La única forma que conozco de detectar esto (por ejemplo, si estoy depurando) es ajustar el contenido de la función de devolución de llamada en un try/catch. Por ejemplo:
MYSITE.PageHelper.prototype.handleCallback = function(resp) {
try {
console.log("Start callback processing...");
var x = missingVar + "text"; // This line generates an exception...
console.log("Finished callback processing.");
} catch (e) {
console.log(e);
}
};
¿Alguien más ha encontrado este problema? ¿Alguna solución temporal por ahí?
¡Gracias de antemano! comportamiento
Creo que el código que ha citado solo funciona para eventos Ajax, no para los simples tipos de eventos onClick sobre los que se ha formulado la pregunta. –
¡Esta es 'la' solución! Debe implementar el método Ajax.Responders -> onException como se ilustra arriba. –
Esto es excelente, gracias por diseñarlo bien con todas las fuentes – febs