Передача объекта в $ (window) .bind () - PullRequest
0 голосов
/ 16 марта 2012

У меня есть общий (пользовательский) плагин jQuery. $ .Fn.something (). Это вызывается для некоторых объектов в моем DOM. Скажем

$('div.section').something()

Внутри функции у меня что-то вроде этого ...

$.fn.something = function(options) {

    //here **this** refers to $('div.section') which is what I want

    $(window).bind('scroll', function(){
        //how do I get the 'this' from above into here.
    });

});

Я не могу получить ссылку на «это» внутри плагина ВНУТРИ функции .bind (). У меня есть обходной путь, где я сохраняю «this» в массиве параметров и передаю его таким образом, но я не могу не думать, что есть более простой способ сделать это.

Ответы [ 4 ]

0 голосов
/ 01 мая 2015

Использовать $ .proxy:

$. Fn.something = function (options) {

$(window).bind('scroll', $.proxy(function(){
    //you can now use this
}, this));

});

0 голосов
/ 16 марта 2012

Вы устанавливаете значение this в переменной и затем используете его вместо этого ...

$.fn.something = function(options) {

    var that = this;

    $(window).bind('scroll', function(){
        // use that!
    });

});

Это может показаться хаком, но это очень обычное место.

Если вы можете использовать методы, представленные в ES5, не беспокоясь о обратной совместимости , вы также можете использовать функцию Function.prototype.bind();

$(window).bind('scroll', (function(){
    // use this
}.bind(this)));
0 голосов
/ 16 марта 2012
$.fn.something = function(options) {

    var self=this;

    $(window).bind('scroll', function(){
        //you can now use self
    });

});
0 голосов
/ 16 марта 2012

используйте переменную.

$.fn.something = function(options) {

    var self = this;

    $(window).bind('scroll', function(){
        //use self.options
    });

});

Это трюк, который я узнал от knockoutjs

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