Вызов функции из плагина jQuery - PullRequest
2 голосов
/ 23 февраля 2011

Я изменяю прекрасный jquery.carousel.js плагин, чтобы иметь функцию автозамены.Я хочу использовать setInterval() для вызова функции, но не могу заставить ее играть хорошо.

Вот код, который у меня есть на данный момент:

autoSwitch: function()
{
    if(runAuto)
    {
        $('.next').click();
    }
},
init: function(el, options) {
    if(this.options.auto)
    {
        setInterval("this.('autoSwitch')", this.options.autoTime);
    }
}

Этопросто фрагмент, и есть еще кое-что, но я оставил важные моменты. У меня проблема с setInterval("this.('autoSwitch')", this.options.autoTime);.Что бы я ни пытался в первом аргументе setInterval, оно просто не работает.Так.Не могли бы вы удивительные люди помочь мне, как я вызываю autoSwitch() из функции setInterval(), пожалуйста?

1 Ответ

5 голосов
/ 23 февраля 2011

Я думаю, что вы ищете jQuery.proxy:

init: function(el, options) {
    if(this.options.auto)
    {
        // Give `setInterval` a function to call
        setInterval(jQuery.proxy(this.autoSwitch, this)), this.options.autoTime);
    }
}

jQuery.proxy гарантирует, что функция вызывается с правильным контекстом (this значение). Подробнее об этой общей концепции здесь: Вы должны помнить this

Это зависит от jQuery. Если вы хотите более общее решение, вы можете использовать замыкание:

init: function(el, options) {
    var context = this;    // Remember what `this` is in a variable
    if(this.options.auto)
    {
        // Give `setInterval` a function to call
        setInterval(function() {
            // The function is a closure that has access to
            // `context`, and so we can call it
            context.autoSwitch();
        }, this.options.autoTime);
    }
}

Использует замыкание для привязки контекста (см .: Замыкания не сложны ), что является обычным способом сделать это. jQuery.proxy просто закрывает кулисы в хорошо контролируемой среде, чтобы вы знали, что оно не закрывает больше данных, чем вы хотите.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...