Бесконечная рекурсия в подфункции плагина jQuery - PullRequest
0 голосов
/ 25 июля 2010

Я написал следующий плагин jQuery:

(function($){
    $.fn.imageSlide = function(options){
      $(this).imageSlide.nextSlide();
      console.log("imageslide");
    };

    $.fn.imageSlide.nextSlide = function(){
      console.log("nextslide");
      $this = $(this);
    };

})(jQuery);

Некоторый фон:

Я хочу, чтобы плагин слайдера изображений, чтобы затемнять фон (из-за производительности я не могуиспользуйте плагин Supersized ).Я хочу предоставить пользователю несколько функций: плагин imageSlide «конструктор» и несколько других функций, например imageSlide.nextSlide и imageSlide.previousSlide, чтобы позволить пользователю выполнять эти действия извне плагина.

imageSlide функция должна вызывать imageSlide.nextSlide function, чтобы вставить (или постепенно) первое изображение.

Проблема:

Кажется, что линия $this = $(this); запускает бесконечную рекурсию функции imageSlide.nextSlide.

  • Почему это происходит?
  • Кажется, что $.fn.imageSlide.nextSlide = function(){}; - это неправильный способ выставить другую функцию в плагине jQuery.Как мне это сделать?

1 Ответ

0 голосов
/ 26 июля 2010

Я точно не знаю, что является причиной ошибки, но нет необходимости помещать все ваши статические методы в прототип jQuery.

Попробуйте выставить плагин, используя что-то вроде:

(function($) {

// The constructor of your plugin:
var imageSlide = function(elems, options) {
    this.elems = elems; // the targets from the jQuery selector
    this.options = options;
};

// the public inherited methods:
imageSlide.prototype = {
    nextSlide: function() {
        console.log('nextSlide called');
    }
};

// extending the jQuery prototype and returning only one instance:
$.fn.imageSlide = function(options) {
    return new imageSlide(this, options);
};

})(jQuery);

Теперь вы можете вызвать плагин, и его методы будут такими:

var myGallery = $('#gallery').imageSlide();
myGallery.nextSlide();
...