2017-02-07 3 views
0

로직이없는 템플릿 프레임 워크 인 JMustache에도 불구하고보기에 몇 가지 기본 표현식을 사용할 수 있는지 궁금합니다. 예를 들어 내가 우선 순위를 사용하여 표현 언어를 비교할 수 있습니다 JSP 템플릿 그의 작업 높은 우선 순위 행 (EL)를 강조하려는 경우 : 같은 결과를 얻을 수 JMustache으로,JMustache의 조건식

<c:if test="${task.priority == Priority.HIGH}"> 
    <b> 
     <c:out value="${task.priority}" /> 
    </b> 
</c:if> 

그러나, 나는 미리 계산해야 컨트롤러 레이어의 부울 값은 herehere입니다. 그 후, 나는이 방법으로 콧수염 템플릿의 부울 값을 확인할 수 있습니다

{{#highPriority}} 
    <td><b>{{task.priority}}</b></td> 
{{/highPriority}} 

내 질문은, 내가 JSP에서처럼 내가 콧수염과 비교를 할 수 있습니까? 예 :

{{#task.priority == Priority.HIGH}} 
    <td><b>{{task.priority}}</b></td> 
{{/highPriority}} 

그렇지 않은 경우 Handlebars template 프레임 워크에서 제공하나요?

답변

1

두 템플릿 엔진 모두 논리가 없으므로 상자에서 비교할 수 없습니다.

그러나 헬퍼를 등록하고 자신의 논리 버전을 구현할 수 있습니다. https://gist.github.com/doginthehat/1890659에 샘플 구현이 있습니다. 당 SO 표준, 나는 여기에 복사하지만, 일을 doginthehat을 신용 할 해요 :

Handlebars.registerHelper('compare', function(lvalue, rvalue, options) { 

    if (arguments.length < 3) 
     throw new Error("Handlerbars Helper 'compare' needs 2 parameters"); 

    var operator = options.hash.operator || "=="; 

    var operators = { 
     '==':  function(l,r) { return l == r; }, 
     '===': function(l,r) { return l === r; }, 
     '!=':  function(l,r) { return l != r; }, 
     '<':  function(l,r) { return l < r; }, 
     '>':  function(l,r) { return l > r; }, 
     '<=':  function(l,r) { return l <= r; }, 
     '>=':  function(l,r) { return l >= r; }, 
     'typeof': function(l,r) { return typeof l == r; } 
    } 

    if (!operators[operator]) 
     throw new Error("Handlerbars Helper 'compare' doesn't know the operator "+operator); 

    var result = operators[operator](lvalue,rvalue); 

    if(result) { 
     return options.fn(this); 
    } else { 
     return options.inverse(this); 
    } 

}); 

사용 사례가 보일 것 같은 : 나는 doingthehat의 구현을 봤다

{{#compare task.priority Priority.HIGH operator="==="}} 
    <td><b>{{task.priority}}</b></td> 
{{/compare}} 
+0

하지만 난 궁금 콧수염은 기본적으로 비슷한 것을 가졌습니다. 귀하의 답변에 감사드립니다. – telle