개발노트/jQuery
[jQuery] Template 다루기 (x-jquery-tmpl)
dev-mylee
2025. 1. 8. 15:57
1. 기본 문법
<!-- 이거 type 틀리면 동작 안함! -->
<script id="myTemplate" type="text/x-jquery-tmpl">
<tr>
<td>\${name}</td>
<td>\${age}</td>
<!-- if문은 이렇게 -->
{{if gender === 'M'}}
<td>남자</td>
{{else}}
<td>여자</td>
{{/if}}
<!-- each문 -->
{{each hobbies}}
<span>\${$value}</span>
{{/each}}
<!-- hidden값은 요렇게 -->
<input type="hidden" value="\${id}" />
</tr>
</script>
2. 실수했던 것들
1. empty() 안하고 append 했다가 데이터 쌓임...
// ❌ 잘못된 방법
$("#dataList").append($("#myTemplate").tmpl(data));
// ⭕ 올바른 방법
$("#dataList").empty(); // 먼저 비우고
$("#myTemplate").tmpl(data).appendTo("#dataList");
2. 변수명 오타
<!-- 데이터: {userName: "홍길동"} -->
<!-- ❌ 틀린 방법 -->
<div>\${name}</div> <!-- 안나옴 -->
<!-- ⭕ 맞는 방법 -->
<div>\${userName}</div>
3. 조건문에서 실수
<!-- ❌ 이렇게 하면 안됨 -->
{{if status == "Y"}} // 작은따옴표로 해야함
<!-- ⭕ 이렇게 해야함 -->
{{if status === 'Y'}}
4. null 체크 깜빡함
<!-- ❌ 문제있는 코드 -->
<td>\${obj.value}</td> <!-- obj가 null이면 에러 -->
<!-- ⭕ 안전한 코드 -->
<td>{{if obj}}\${obj.value}{{/if}}</td>
<!-- 🎯 더 나은 방법 -->
<td>\${obj ? obj.value : '-'}</td>
3. 자주 쓰는 패턴들
1) 날짜 포맷팅
// 데이터 가공을 미리 해두자
const data = rawData.map(item => ({
...item,
// 가공한 데이터는 새로운 키로
createdDt: moment(item.createdAt).format('YYYY-MM-DD')
}));
<!-- 템플릿에선 깔끔하게 -->
<td>\${createdDt}</td>
2) 금액 포맷팅
// 이것도 미리 가공
const data = rawData.map(item => ({
...item,
// 콤마 추가
amountFmt: item.amount?.toLocaleString() || '0'
}));
<!-- 템플릿에선 바로 사용 -->
<td>\${amountFmt}</td>
3) 빈값 처리
<!-- 자주 쓰는 패턴 -->
<td>\${memo || '-'}</td>
<td>{{if status === 'Y'}}정상{{else}}-{{/if}}</td>
✅ 메모
- template 태그에서 if문 쓸 때는 === 쓰기 (== 쓰면 가끔 이상하게 동작)
- empty()는 습관적으로 하기
- 데이터 가공은 템플릿 바깥에서 하기 (템플릿 안에서 하면 나중에 수정 힘듦)
- 실무에서는 빈값 처리가 생각보다 중요!