2011-08-31 8 views
5

Estoy escribiendo un complemento jQuery e implica vincular un evento a window.scroll. La acción que se realiza dentro de window.scroll depende de la configuración pasada cuando se llama a la inicialización original.

¿Cómo accedo al elemento de datos, o esto, dentro de un evento vinculado?

(function($) { 
    var methods = { 
     init : function(options) { 
      return this.each(function() { 
       $(window).bind("scroll.myPlugin", methods.windowOnScroll); 
      }); 
     }, 
     windowOnScroll : function() { 
      var $this = $(this); 
      var data = $this.data("scrollingLoader"); 
      if (data.something) { 
       // ... 
      } 
     } 
    })(jQuery); 

Respuesta

4

jQuery proporciona una función de conveniencia, $.proxy, que hace la función de unión entre navegadores.

(function($) { 
    var methods = { 
     init : function(options) { 
      return this.each(function() { 
       $(window).bind("scroll.myPlugin", $.proxy(methods.windowOnScroll,methods)); 
      }); 
     }, 
     windowOnScroll : function() { 
      var $this = $(this); 
      var data = $this.data("scrollingLoader"); 
      if (data.something) { 
       // ... 
      } 
     } 
    })(jQuery); 

La función $ .proxy devuelve una función que siempre va a ejecutar la función pasada en el primer argumento en el contexto del segundo argumento. http://api.jquery.com/jQuery.proxy

+0

Me encanta esta respuesta! – xiaohan2012

0

es necesario definir su ámbito de aplicación:

(function($) { 
    var methods = { 
     init : function(options) { 
      return this.each(function() { 
       var scope = this; 
       $(window).bind("scroll.myPlugin", function(){ 
        methods.windowOnScroll.call(scope); 
       }); 
      }); 
     }, 
     windowOnScroll : function() { 
      var $this = $(this); 
      var data = $this.data("scrollingLoader"); 
      if (data.something) { 
       // ... 
      } 
     } 
    })(jQuery); 
Cuestiones relacionadas