2017-09-13 28 views
1

我有類似下面這樣的JavaScript類: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

你是什​​麼意思「*在功能上分開回調中的邏輯*「 - 箭頭函數將被分離邏輯,不是嗎? – Bergi

回答

1

一個可以這樣做:

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

然後:

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

您可以嘗試在你的回調函數結合 「這個」 你的課

registerHandlers() { 
    $('.modal-form-btn').click(this.contactBtnHandler.bind(this)); 
    }; 
+0

是的,綁定應該工作 –