사용자의 에너지 관리 탭에서 DB에 있는 IOT 테이블의 iot_status 값을 불러와서
true false 에 따라 이미지가 변경 되도록 코드를 작성했다.
fetchIotStatus: function () {
$.ajax({
url: "/iot/getIotStatus",
method: "GET",
dataType: "json",
success: function (data) {
data.forEach(function (iot) {
let element = document.getElementById(iot.iotId);
if (element) {
// 아이콘의 타입을 확인하여 상태에 맞는 URL로 이미지 설정
let deviceType = element.classList.contains('iot-aircon') ? 'aircon' : 'lamp';
// imagePath에서 URL 가져오기
let imageUrl = iot.iotStatus ? imagePath[deviceType + "On"] : imagePath[deviceType + "Off"];
// 아이콘의 배경 이미지 업데이트
element.style.backgroundImage = `url(${imageUrl})`;
} else {
console.warn(`Element with id ${iot.iotId} not found.`);
}
});
},
error: function (error) {
console.error("IoT 상태 불러오기 오류:", error);
}
});
},
데이터 베이스의 값은 이상없이 잘 불러와지는데 이미지 경로 설정이 문제인지 이미지가 바뀌지 않고 사라지기만 했다.
문제가 되는 라인은
// 아이콘의 배경 이미지 업데이트
element.style.backgroundImage = `url(${imageUrl})`;
이 부분이였다. 가독성이 좋게끔 템플릿 리터럴 ( ` ) 을 사용해서 ${} 으로 변수를 담았다
해결방법은 위의 코드를 밑에 두가지 방법중 하나로 바꾸는 것이였다.
element.style.backgroundImage = `url(\\${imageUrl})`;
element.style.backgroundImage = "url(" + imageUrl + ")";
템플릿 리터럴에서 ${}를 문자열로 인식하도록 하려면 \$ 처럼 역슬래시를 붙여서 이스케이프 처리를 해야한다.
아니면 밑의 방법처럼 템플릿 리터럴을 사용하지않는 방법도 있다.