2016-05-29 2 views
0

У меня есть класс, который несколько раз обманул.Как бороться с «этим» в обратных вызовах?

Captcha = function(el) { 
    var _this = this; 
    this.el = $(el); 
    this.button = this.el.parent().find('button'); 
    this.render(); 
}; 


Captcha.prototype.callback = function() { 
    _this.el.addClass('visuallyhidden'); 
    _this.button.removeClass('visuallyhidden'); 
}; 

Captcha.prototype.render = function(grecaptcha){ 
    this.grecaptcha.render(this.el.dom[0],{ 
     'sitekey' : 'hash', 
     'callback': this.callback 
    }); 
}; 

this.callback ссылается на функцию, которая срабатывает в качестве обратного вызова на апи-запроса. Как вы можете видеть, я пытаюсь использовать _this для ссылки на функцию, но это почему-то недоступно внутри обратного вызова.

+1

сделать ваш _this глобальный –

+3

заменить '' this.callback' с this.callback.bind (это) ' – dandavis

+0

@ S.Petrosov Я не могу потому что я иметь более одного экземпляра класса и обратного вызова должен знать, какой он есть. – Himmators

ответ

0

Вы всегда можете добавить объекты к объекту window в качестве быстрого хранения.

Captcha = function(el) { 
    var _this = this; 
    window.captchaObject = this; 
    this.el = $(el); 
    this.button = this.el.parent().find('button'); 
    this.render(); 
}; 

Captcha.prototype.callback = function() { 
    var _this = window.captchaObject; 
    _this.el.addClass('visuallyhidden'); 
    _this.button.removeClass('visuallyhidden'); 
}; 

Captcha.prototype.render = function(grecaptcha){ 
    this.grecaptcha.render(this.el.dom[0],{ 
     'sitekey' : 'hash', 
     'callback': this.callback 
    }); 
}; 
+1

Я не могу, потому что у меня есть несколько экземпляров класса, и обратный вызов должен знать, какой именно. – Himmators

Смежные вопросы