~18.3 자바스크립트로 댓글 수정하기(종이책 p.511~537)
댓글 수정 페이지는 부트스트랩에서 제공하는 모달 기능을 이용해 만든다.
모달(modal)은 웹 페이지에 새 창을 띄우는 팝업 창과 달리 같은 웹 페이지 내부에서 상위 레이어를 띄우는 방식으로 사용하는 창이다. 모달 창이 뜨면 기존 창은 비활성 상태가 되고, 모달 창을 종료해야만 원래 화면으로 돌아갈 수 있다.

수정 버튼을 클릭하면 모달 창을 띄우고 거기서 댓글을 수정할 수 있도록 구현한다.
<!-- Button trigger modal --> 부분을 복사해서 _list.mustache의 {{nickname}} 아랫 부분에 붙여 넣는다.<!-- Modal --> 부분도 복사해 _list.mustache 코드의 맨 아래에 붙여 넣는다.<!-- Modal --> 코드를 다음과 같이 수정한다.모달 본문에 댓글 수정 폼을 넣는다. <form> 태그를 이용하며, _new.mustache에서 만들었던 폼을 가져와서 사용한다.
<form>・・・<form> 코드를 복사한다.({[#article}}, {{/article}})<input> 구문에 value 속성은 필요 없으므로 삭제하고, id를 edit-comment-id로 수정한다.<input> 구문을 하나 더 복사해 id를 edit-comment-article-id로 수정한다._list.mustache파일의 {{#commentDtos}}・・・{{/commentDtos}}로 감싸진 부분에서 commentDto에 저장된 데이터를 모달 트리거 버튼의 속성 값으로 가져온다.
이처럼 data-로 시작하는 속성을 데이터 속성이라고 한다. 데이터 속성은 HTML 요소에 추가 정보를 저장하고 싶을 때 사용한다.
받아 온 데이터를 모달의 각 폼에 출력한다. 이를 모달 이벤트 처리라고 한다.
코드 맨 아래에 <script></script> 태그를 추가하고 그 사이에 중괄호({})로 영역을 잡는다.
모달 이벤트 처리를 하려면 먼저 모달을 선택해야 하므로 querySelector() 메서드로 모달을 선택하고 이를 commentEditModal 변수에 저장한다.
// 모달 요소 선택
const commentEditModal = document.querySelector(”#comment-edit-modal”);
addEventListener() 메서드를 사용해 모달이 열리는 이벤트를 감지해 이벤트가 발생하면 기존 댓글을 받아온다.
// 모달 이벤트 감지
commentEditModal.addEventListener(”show.bs.modal”, function(event) {});
function(event)는 모달이 열리는 이벤트를 매개변수로 받아 실행되는 함수이다. 이렇게 특정 이벤트 처리를 담당하는 함수를 이벤트 핸들러(event handler)라고 한다.
function(event) 함수 내부에 다음과 같이 구현한다.
const triggerBtn = event.relatedTarget;
const id = triggerBtn.getAttribute(”data-bs-id”);
const nickname = triggerBtn.getAttribute(”data-bs-nickname”);
const body = triggerBtn.getAttribute(”data-bs-body”);
const articleId = triggerBtn.getAttribute(”data-bs-article-id”);
document.querySelector(”#edit-comment-nickname”).value = nickname;
document.querySelector(”#edit-comment-body”).value = body;
document.querySelector(”#edit-comment-id”).value = id;
document.querySelector(”#edit-comment-article-id”).value = articleId;
수정 완료 버튼을 클릭해 REST API를 호출하는 형식으로 만든다.
<script></script> 태그 안쪽에 중괄호 블록을 하나 더 잡고 수정 완료 버튼을 선택한다.이제 http://localhost:8080/articles/5 페이지에 가서 Choi가 작성한 댓글의 수정 버튼을 클릭하고 탕수육을 돈가스로 수정한 후 수저 완료 버튼을 클릭하면 ‘댓글이 수정됐습니다.’ 라는 창이 나타나고 확인 버튼을 누르면 Choi의 댓글이 수정된 것을 확인할 수 있다.
_list.mustache



