Класс Javascript, обратный вызов свойства access [duplicate]

1

У меня есть следующий класс 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. Я знаю, что могу решить это, используя функцию стрелки, но мне интересно, может ли ее разделить в функции логику в обратном вызове (вот краткий пример, но у меня есть более длинные функции) способом, подобным тому, который я есть с помощью.

Спасибо

  • 0
    Что вы подразумеваете под « отделить в функции логику в обратном вызове » - функция стрелки будет разделена логикой, не так ли?
Теги:
ecmascript-6
es6-class

2 ответа

1
Лучший ответ

Можно было:

getHandler (){
  return e => {
    //this is ModalFormButton
  };
}

А потом:

 $('.modal-form-btn').click(this.getHandler());
2

Вы можете попробовать привязать "это" к вашему классу в обработчике обратного вызова

registerHandlers() {
    $('.modal-form-btn').click(this.contactBtnHandler.bind(this) );
  };
  • 0
    Да, привязка должна работать

Ещё вопросы

Сообщество Overcoder
Наверх
Меню