기본적으로 버튼 클릭으로 Ajax를 통해 열린 모달을 동적으로 생성하는 Javascript 모듈을 만들고 있습니다. 이 버튼에는 Ajax 호출에 전달하는 데이터 속성이있어서 어떤 모드를 열 것인지를 알려줍니다. 여기 이 키워드 * 자바 스크립트 모듈 내
모듈의 단순화 된 버전입니다 :(function() {
let modalwindow = {
init: function() {
this.bindEvents();
},
bindEvents: function() {
$(document).on('click', '[data-action="open-modal"]', this.ajaxCall.bind(this));
},
ajaxCall: function() {
$.ajax({
url: ajax.url,
type: 'post',
context: this,
data: {
modal_id: this.modalID, // In this case, I need *this* to refer to the button
action: 'open_modal'
},
success: function (response) {
// In this case, I need *this* to refer to the modalwindow object
this.openModal(response, this.modalID);
}
});
},
openModal: function(response, modalID) {
$(response).appendTo(Body).attr('data-state', 'active-modal');
}
}
modalwindow.init();
})()
문제는 ajaxCall
방법 나는 다른 두 가지 참조하기 위해 이 키워드를 필요로한다 : 나는 버튼을 할 때 참조 할 필요 modal_id 매개 변수를 설정했습니다. 성공하려면 openModal
메서드를 호출하려면 modalwindow 객체를 참조해야합니다. 어떻게해야합니까?
지금은 이은 항상 modalwindow 개체를 참조하며, 실제로는 openModal
작품입니다. 하지만 거기에 이 버튼을 참조해야하기 때문에 modal_id 매개 변수가 잘못되었습니다.
저는 Modular JS에 매우 익숙하며 이것은 나를 미치게했습니다. 비슷한 질문을 찾았지만 아무도 모듈 내의 모든 메소드에 대해 문제를 해결하지 못하는 것 같습니다.
[JavaScript 클로저는 어떻게 작동합니까?] (https://stackoverflow.com/questions/111102/how-do-javascript-closures-work) – Salketer
* "*이 Javascript 모듈 내의 * 키워드"* "모듈"이라는 단어는 이제 JavaScript에서 [특정 기술적 인 의미] (https://tc39.github.io/ecma262/#sec-modules)를가집니다. (ES2015 이전에는 그렇지 않았지만 어떤 언어를 가리 키기 위해 느슨하게 사용되었습니다. 문제를 해결하는 다양한 방법의 수). 그래서 나는 실제 자바 스크립트 모듈을 언급하지 않을 때 그것으로부터 멀리 떨어져있을 것이다. –