home
자바
home

에러

맵갤러리 조회 js 생성

$(document).ready(function() { new test(); }) class test { constructor() { this.getMapList(); document.getElementById('menuTitle').innerHTML = '지도드림'; //메뉴명 하드코딩 (추후 삭제) } getMapList() { $.ajax({ method : 'GET', url : '/mapGale/work/getExportMapList.do', datatype : 'json', data : '', context: this, // ajax를 this로 가르키는 것이 아닌 클래스를 this로 가르키게 된다. success: function(res) { this.draw(res); }, error: function(e) { console.log(e); } }); } draw(param) { let html = ''; const list = param.list; list.forEach(item => { html += `<div class="boxContainer" style="float: left; margin-right: 20px; margin-bottom: 20px; cursor: pointer;"> <div class="box"> <div class="boxWrap mapListItem"> <div class="bgArea" data-userMapId="${item.userMapId}" style="background:url(data:image/png;base64,${ item.base64 }) no-repeat; background-size:100% 100%; width: 300px; height: 300px;"></div> <p style="font-size: 1.5em; background-color: lightgrey;">${ item.userMapSj }</p> </div> </div> </div>`; }); $('#listArea').html(html); //목록 $('#mapListCnt').text(param.cnt); //건수 // 동적으로 div가 만들어진 후에 이벤트를 붙임 const divList = document.querySelectorAll('.boxContainer'); divList.forEach(item => { item.addEventListener('click', () => { // 클릭 시 상세 조회 url 팝업창 이동 const mapId = event.target.dataset.usermapid window.open(`/main/main.do?status=gallery&userMapId=${mapId}`); }) }) } }
JavaScript
복사
1.
js class 문법 사용
2.
빽틱(`) 사용
변수를 + 로 붙이지 않고 ${변수} 안에 넣어서 사용할 수 있음
줄바꿈 되어도 + 할 필요 없이 쭉 작성하면 됨
3.
html5 - data문법 사용
div 내에 data-userMapId="${item.userMapId}"
자식 요소를 선택하지 않고 div 내에 원하는 값을 줌으로써 편하게 호출 가능함
class 선언 후에 동적으로 만들어진 div를 호출 시 호출되지 않는 문제가 있었음
⇒ class 내에 div에 대한 이벤트를 붙임으로써 해결
실행 순서 문제
비동기인 ajax로 값을 불러오고, 그 밑 함수를 호출하려니 실행순서가 꼬인 것으로 보임 ⇒ ajax에 async:false 값을 줘서 동기식으로 변경하면 해결 됐을 것!
지도 썸네일 img가 화면에 띄워지지 않는 문제
DB에 img 파일이 변환되어 저장되고 있었음
화면에 불러올 때 VO파일에서 (get, set으로 정의됨) 변환 후 화면에 출력
<div class="bgArea" data-userMapId="${item.userMapId}" style="background:url(data:image/png;base64,${ item.base64 }) no-repeat; background-size:100% 100%; width: 300px; height: 300px;"></div>
JavaScript
복사