2016-05-29 13 views
0

Ich habe eine Klasse, die mehrere Male erklärt wird.Wie mit "das" in Rückrufen umgehen?

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 eine Funktion verweist, die als Rückruf auf einer api-Anfrage ausgelöst wird. Wie Sie sehen können, versuche ich _this zu verwenden, um auf die Funktion zu verweisen, aber das ist aus irgendeinem Grund nicht im Callback verfügbar.

+1

machen Ihre _this global –

+3

ersetzen 'this.callback' mit' this.callback.bind (dieser) ' – dandavis

+0

@ S.Petrosov kann ich nicht weil ich mehr als eine Instanz der Klasse haben und die Rückruf muss wissen, wer es ist. – Himmators

Antwort

0

Sie können Objekte zum Objekt window jederzeit als Schnellspeicher hinzufügen.

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

Ich kann nicht, ich habe mehr als eine Instanz der Klasse und der Rückruf muss wissen, welche. – Himmators

Verwandte Themen