2017-02-07 37 views
0

儘管JMustache是一個無邏輯的模板框架,但我想知道是否可以在視圖中使用一些基本表達式。例如,如果我想強調,其任務是高優先級的行,用JSP模板,我可以比較使用的優先級表達式語言(EL):JMustache中的條件表達式

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

然而,JMustache得到同樣的結果,我要預先計算Controller層中的布爾值,您可以看到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); 
    } 

}); 

你的使用情況會是什麼樣子:

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

我見過的doingthehat的實現,但我想,如果小鬍子默認有類似的東西。感謝您的回答。 – telle