2011-08-31 18 views
5

में $ एक्सेस करें मैं एक jQuery प्लगइन लिख रहा हूं और इसमें window.scroll पर एक ईवेंट बाध्य करना शामिल है। window.scroll के भीतर की गई कार्रवाई मूल अंतर्निहितता के दौरान पारित सेटिंग्स पर निर्भर करती है।jquery प्लगइन इवेंट

मैं एक बाध्य घटना के अंदर डेटा तत्व, या यह कैसे उपयोग करूं?

(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); 

उत्तर

4

jQuery एक सुविधा समारोह, $.proxy, कि क्रॉस-ब्राउज़र समारोह बाध्यकारी करता है प्रदान करता है।

(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); 

$ .proxy समारोह एक समारोह है कि हमेशा समारोह दूसरा तर्क के संदर्भ में पहले दिया गया तर्क निष्पादित करेंगे देता है। http://api.jquery.com/jQuery.proxy

+0

मुझे यह जवाब पसंद है! – xiaohan2012

0

आप अपने दायरे को परिभाषित करने की जरूरत है:

(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); 
संबंधित मुद्दे