Estoy intentando reescribir una clase de información sobre herramientas de Mootools en JQuery usando este class plugin. Cuando se crea una instancia de mi clase, adjunto un detector de eventos a un enlace de destino que desvanecerá la información sobre herramientas.JQuery equivalente de MooTools bind (this)
En devoluciones de llamadas de eventos JQuery asigna la palabra clave "this" al destino del evento, así que para mantener una referencia a las propiedades de la clase estoy usando apply() para establecer "this" para indicar la instancia de clase. Aparentemente, esta es la contraparte en la función bind() handy de JQuery of Mootools.
Desafortunadamente cuando uso apply() pierdo el parámetro de evento de devolución de llamada. Por ejemplo, en este bit aparece el error "e no está definido" en la segunda línea.
this.target.bind('click', function(e){
e.preventDefault();
var tip = this.opts.tip;
tip.fadeOut(500, function(){
tip.bind('click', function(){
showing = false;
})
});
}.apply(this))
¿Falta algún truco aquí? ¿Alguien sabe una forma de evitar este problema?
Gracias Fred
Dimitar ¡eres una enciclopedia andante de JS! Gracias por la explicación detallada.En esta situación, su sugerencia de una referencia parece ser la mejor, así que me gustaría hacer: '\t var self = this; \t this.target.bind ('clic', la función (e) { \t \t e.preventDefault(); \t \t self.toggleTip(); \t}) ' en mi método init, donde toggleTip () es una devolución de llamada por clic separada. ¡Un gran consejo, gracias! –
@Dimitar: funciona muy bien. thnx. (at) all: Note que esta técnica de programación funcional se llama currying (http://www.dustindiaz.com/javascript-curry/). jQuery tiene una extensión de prototipo similar del nombre del método 'bind', que puede ser algo confuso porque se usa para el manejo de eventos y se declara para las no funciones. En jQuery también hay un uso del contexto en $ .ajax para un propósito similar. –