handlebar를 활용한 템플릿 작업 - accidentlywoo/legacyVue GitHub Wiki
- 들어가기 전에 templating 작업은 ES2015에서 template literal로 좀 더 간단래지긴 했습니다. 하지만 여전히 다양한 조건 상황에서의 처리 등은 여전히 복잡합니다. templating 작업을 돕는 라이브러리는 꽤 다양하고 막강한 방법을 제공합니다. 이를 사용해보면서 templating 처리의 세련된 방법을 알아두면 좋습니다. 더구나 아직도 많은 legacy코드는 template라이브러리를 사용하는 경우가 많습니다.
- 라이브러리(handlerbar)를 사용한 templating 작업을 이해한다.
- handlebar
html에 다음과 같이 template 코드를 만듭니다. `<script type="myTemplate" id="listTemplate">
bindTemplate(v);`
예를 들어 comment가 1개 이상일 수 있습니다. `var data = { "id" : 88, "name" : "crong", "content" : "새로운글을 올렸어요", "like" : 5, "comment" : ["댓글이다", "멋진글이네요", "잘봤습니다"] };
bindTemplate(v);이런 경우는 이렇게 반복문을 넣을 수도 있습니다. each 부분을 눈여겨보세요.
<script type="myTemplate" id="listTemplate">
그런데, 실제 데이터는 좀 더 많을 것입니다.
var data = [ {"id" : 88, "name" : "crong", "content" : "새로운글을 올렸어요", "like" : 5, "comment" : ["댓글이다", "잘했어요"]}, {"id" : 28, "name" : "hary", "content" : "전 오늘도 노래를 불렀어요", "like" : 0, "comment" : ["제발고만..","듣고싶네요 그노래"]}, {"id" : 23, "name" : "pororo", "content" : "크롱이 항상 말썽을 피워서 행복해~", "like" : 4, "comment" : []}, {"id" : 5, "name" : "pobi", "content" : "물고기를 한마리도 잡지 못하다니..", "like" : 5, "comment" : ["댓글이다", "멋진글이네요", "잘봤습니다"]} ];
반복적으로 결과를 합치는 게 좋겠습니다.
reduce를 사용해서 여러분들이 한 번 해보세요.
지금 예제에서 댓글이 없는 경우에는 다른 메시지를 처리해야 한다면 어떨까요?template은 말 그대로 고정되어 있는 것이죠. 하지만 handlebar에서는 이를 지원하네요.
<script type="myTemplate" id="listTemplate"> <li> <div>게시자 : {{name}}</div> <div class="content">{{content}}</div> <div>좋아요 갯수 <span> {{like}} </span></div> <div class="comment"> <h3>댓글목록</h3> {{#if comment}} {{#each comment}} <div>{{@index}}번째 댓글 : {{this}}</div> {{/each}} {{else}} <div>댓글이 아직 없군요</div> {{/if}} </div> </li> </script>
템플릿 라이브러리에서는 분기,반복문과 같은 방식을 기본으로 지원합니다.