У меня есть следующий класс javascript, похожий на этот:
class ModalFormButton {
constructor() {
this.contactForm = new ContactForm();
let utils = new Utils();
this.$signupModal = $(utils.getModalTmpl());
}
loadContactForm() {
this.$signupModal.modal();
this.contactForm.load();
}
contactBtnHandler(e) {
e.preventDefault();
let utils = new Utils();
var $t = $(this),
$modalTitle = $t.data('modal-title'),
$modalFormId = $t.data('modal-form-id');
$('body').append(this.$signupModal);
this.$signupModal.find('.modal-title').html($modalTitle);
this.$signupModal.find('.modal-body').load($t.attr('href') + ' #' + $modalFormId,this.loadContactForm);
};
registerHandlers() {
$('.modal-form-btn').click(this.contactBtnHandler);
};
load() {
this.registerHandlers();
};
}
Моя проблема заключается в том, что при contactBtnHandler
у меня нет доступа к свойствам класса, потому что контекст принадлежит modal-form-btn
. Я знаю, что могу решить это, используя функцию стрелки, но мне интересно, может ли ее разделить в функции логику в обратном вызове (вот краткий пример, но у меня есть более длинные функции) способом, подобным тому, который я есть с помощью.
Спасибо
Можно было:
getHandler (){
return e => {
//this is ModalFormButton
};
}
А потом:
$('.modal-form-btn').click(this.getHandler());
Вы можете попробовать привязать "это" к вашему классу в обработчике обратного вызова
registerHandlers() {
$('.modal-form-btn').click(this.contactBtnHandler.bind(this) );
};