Доступ к $ this в событии плагина jquery - PullRequest
5 голосов
/ 31 августа 2011

Я пишу плагин jQuery, который включает в себя привязку события к window.scroll. Действие, выполняемое в window.scroll, зависит от настроек, переданных при вызове исходной инициализации.

Как получить доступ к элементу данных или к этому внутри связанного события?

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

Ответы [ 2 ]

4 голосов
/ 01 сентября 2011

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 голосов
/ 01 сентября 2011

Вам необходимо определить свою сферу:

(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);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...