node.js中的模板引擎jade、handlebars、ejs


  使用node.js的Express腳手架生成項目默認是jade模板引擎,jade引擎實在是太難用了,這么難用還敢設為默認的模板引擎,過分了啊!用handlebars模板引擎寫還說的過去,但筆者更願意使用ejs,選它是因為跟Asp.Net的模板引擎有點相似吧。

   網上有過這三個模板引擎萬行數據渲染比較,耗時結果 Jade 287ms > ejs 43ms > Handlebars 28ms

  先來看一下這幾個模板引擎:

jade模板  (express demo)

html
    head
        title #{title}
        meta(charset="UTF-8")
    body
        div.description #{description}
        ul
            - each data in datas
                li.item(id='item_'+data.index)
                    span= data.time
                    a.art(href=data.url)= data.title

就看起來干凈,引入縮進,喪失了html該有的靈活性

handlebars 模版 (express -hbs demo)

<!doctype html>
<html>
<head>
    <meta charset="UTF-8">
    <title>{{title}} - Page Test</title>
</head>
<body>
    <div class="description">{{description}}</div>
    <ul>
{{#datas}}
        <li class="item" id="item_{{index}}"><span>{{time}}</span><a href="{{url}}" class="art">{{title}}</a></li>
{{/datas}}
    </ul>

</body>
</html>

用起來也是有點不自在

ejs 模版 (node -e demo)

<!doctype html>
<html>
<head>
    <meta charset="UTF-8">
    <title><%=title%> - Page Test</title>
</head>
<body>
    <div class="description"><%=description%></div>
    <ul>
<% function data(data) { %>
        <li class="item" id="item_<%=data.index%>"><span><%=data.time%></span><a href="<%=data.url%>" class="art"><%=data.title%></a></li>
<% } %>
<% datas.map(data) %>
    </ul>

</body>
</html>

  雖然看起來亂點,但是便於直接書寫自己的邏輯,適合於個人項目,如果真的有代碼潔癖,可以考慮把服務器端書句賦值給前端js,在瀏覽器端渲染數據

<script> 
  var name = '<%=name%>';  // name是字符串
  var str='<%- JSON.stringify(userinfo) %>';  //userinfo是對象
  var userino=JSON.parse(str);
 </script>

這種方式也可做一下變形,在服務器端傳過來的時候就先把對象轉化成字符串

<script> 
  var userinfo=<%- userinfo %>;  //后端傳的時候JSON.stringify()一下,因為js是動態類型,所以這里可直接得到userinfo對象
 </script>

以上兩種方式同樣適合於handlebars模板引擎

  • <% code %>:  JavaScript 代碼。 
  • <%= code %>:顯示替換過 HTML 特殊字符的內容。 相當於handlebars中的 {{{ code }}},不希望被編碼的Html
  • <%- code %>: 顯示原始 HTML 內容。 相當於handlebars中的 {{ code }},經過編碼的HTML

  <%= code %> 和  <%- code %> 的區別,當變量 code 為普通字符串時,兩者沒有區別。當 code 比如為  <h1>hello</h1> 這種字符串時, <%= code %> 會原樣輸出  <h1>hello</h1> ,而  <%- code %> 則會顯示 H1 大的 hello 字符串。

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2024 CODEPRJ.COM