본문 바로가기
View & JavaScript

[Mustache] 기본 문법

by 박성민 2021. 6. 2.

레이아웃 추가

mustache 디렉토리 구조
1

index.mustache

{{>layout/header}}

<body>
<div class="container">
    {{>layout/bodyHeader}}
    <div class="jumbotron">
        <h1>🚘중고차 관리 프로그램🚖</h1>
        <p class="lead">차량 매입 기능</p>
        <p>
            <a class="btn btn-lg btn-dark" href="/car/save">차량 매입</a>
            <a class="btn btn-lg btn-dark" href="/car/findAll">차량 목록</a>
        </p>
        <p class="lead">차량 출고 기능</p>
        <p>
            <a class="btn btn-lg btn-info" href="/car/findNormal">차량 출고</a>
            <a class="btn btn-lg btn-info" href="/release/findAll">출고 목록</a>
        </p>
    </div>

{{>layout/footer}}
  • {{> }}: 현재 머스테치 파일을 기준으로 다른 파일을 가져온다.

반복문

{{#cars}}
    <tr>
        <td>{{id}}</td>
        <td>{{model}}</td>
        <td>{{color}}</td>
        <td>{{productionYear}}</td>
        <td>{{staff}}</td>
        <td>
            <a href="javascript:void(0);" class="btn btn-success" onclick="normalRelease('{{id}}', '{{carNumber}}', '{{model}}', '{{color}}');">출고</a>
        </td>
    </tr>
{{/cars}}
  • {{#cars}}: cars라는 List를 순회한다.
  • {{변수명}}: List에서 뽑아낸 객체의 필드를 사용한다.

IF/ELSE

{{#isReleased}}
    <td class="font-red">{{status}}</td>
{{/isReleased}}
{{^isReleased}}
    <td class="font-green">{{status}}</td>
{{/isReleased}}
  • {{#isReleased}}: isReleased가 True일 경우 실행된다.
  • {{^isReleased}}: isReleased가 False일 경우 실행된다.

관련해서 status == 'RELEASE'일 경우와 아닐 경우를 구분하려 했으나 mustache에는 특정 값을 비교하는 문법은 존재하지 않는다고 하여 응답에 boolean타입의 sReleased 필드를 추가하여 위와 같이 사용했다.

@Getter
public class CarFindAllResponseDto {

    private Long id;
    private String carNumber;
    private String vin;
    private Category category;
    private String model;
    private String color;
    private String productionYear;
    private String staff;
    private LocalDateTime purchaseDate;
    private String status;
    private boolean isReleased; //필드 추가
    private LocalDateTime releaseDate;

    ...

}

참고

댓글