타임라인 만들기 Project
submitEdit - 메모 수정하기
코린이 연대기
2020. 11. 30. 17:46
function addHtml(){}
// 메모 하나를 HTML로 만들어서 body 태그 내 원하는 곳에 붙입니다.
function addHTML(id, username, contents, modifiedAt) {
// 1. HTML 태그를 만듭니다.
let tempHtml = `<div class="card">
<!-- date/username 영역 -->
<div class="metadata">
<div class="date">
${modifiedAt}
</div>
<div id="${id}-username" class="username">
${username}
</div>
</div>
<!-- contents 조회/수정 영역-->
<div class="contents">
<div id="${id}-contents" class="text">
${contents}
</div>
<div id="${id}-editarea" class="edit">
<textarea id="${id}-textarea" class="te-edit" name="" id="" cols="30" rows="5"></textarea>
</div>
</div>
<!-- 버튼 영역-->
<div class="footer">
<img id="${id}-edit" class="icon-start-edit" src="images/edit.png" alt="" onclick="editPost('${id}')">
<img id="${id}-delete" class="icon-delete" src="images/delete.png" alt="" onclick="deleteOne('${id}')">
<img id="${id}-submit" class="icon-end-edit" src="images/done.png" alt="" onclick="submitEdit('${id}')">
</div>
</div>`;
// 2. #cards-box 에 HTML을 붙인다.
$('#cards-box').append(tempHtml);
}
우선 개발 스펙을 먼저 확인하기
- 작성 대상 메모의 username과 contents 를 확인
- 작성한 메모가 올바른지 확인
- 전달할 data 를 JSON으로 바꾸기
- PUT /api/memos/{id} 에 data를 전달
웹페이지를 실행해보면 id 가 contents, editerea 인 둘은 한쪽이 나오면 다른 한 쪽이 숨겨지는 관계다.
만약 수정을 하게되면 ${id}-textarea의 값을 .val로 가져와야 하고
(커서가 깜빡이는 것들은 .val로 가져옴)
username 처럼 커서 없이 텍스트로 박혀있는 경우 .text로 가져와야 한다.
(커서 없이 고정인 값들은 .text로 가져옴)
.trim으로 앞뒤 공백을 없애준다.
isValidContents로 유효성처리 / ajax put으로 업데이트
// 메모를 수정합니다.
function submitEdit(id) {
// 1. 작성 대상 메모의 username과 contents 를 확인합니다.
let username = $(`#${id}-username`).text().trim();
let contents = $(`#${id}-textarea`).val().trim();
// 2. 작성한 메모가 올바른지 isValidContents 함수를 통해 확인합니다.
if (isValidContents(contents) == false) {
return;
}
// 3. 전달할 data JSON으로 만듭니다.
let data = {'username': username, 'contents': contents};
// 4. PUT /api/memos/{id} 에 data를 전달합니다.
$.ajax({
type: "PUT",
url: `/api/memos/${id}`,
data: JSON.stringify(data),
contentType: 'application/json',
success: function (response) {
alert('변경이 완료되었습니다.');
window.location.reload();
}
})