關於 Template Engine

週末有點時間,找了些代碼來看。最近在學 clojure,因而看了個 clojure 的項目,叫 enlive 的項目(https://github.com/cgrand/enlive)。這是一個 clojure 寫的 HTML Template Engine。其特點是能夠經過相似 jquery 選擇器的方法選取模板中的元素,而後修改元素的值、屬性、css 類和文本內容等。這種渲染模板的方式,至少對我來講是比較新的,之前見過的 Template Engine,大概就這麼兩種:javascript

  • 相似 PHP、JSP 頁面,在 HTML 頁面裏會插入一些由特殊符號包起來的變量、標籤等,而後渲染的時候會注入一組值,在最後渲染出來的頁面裏,那些特殊符號包起來的變量會被替換成注入的值。那些特殊符號包起來的標籤能夠用來作一些 if..elseforeach 之類的邏輯操做,典型表明是 Handlebarsejs 等。有的甚至直接搞成跟 PHP 同樣,能夠在 HTML 模板裏嵌入邏輯代碼,如 https://github.com/henix/slt2。示例:
<h1>Comments</h1>

<div id="comments">
  {{#each comments}}
  <h2><a href="/posts/{{../permalink}}#{{id}}">{{title}}</a></h2>
  <div>{{body}}</div>
  {{/each}}
</div>
  • 相似 JadeHiccup,經過指定標籤的屬性,最後渲染成 HTML 頁面,感受跟用 zen coding 寫 HTML 頁面同樣。示例:
doctype 5
html(lang="en")
  head
    title= pageTitle
    script(type='text/javascript').
      if (foo) {
         bar(1 + 5)
      }
  body
    h1 Jade - node template engine
    #container.col
      if youAreUsingJade
        p You are amazing
      else
        p Get on it!
      p.
        Jade is a terse and simple
        templating language with a
        strong focus on performance
        and powerful features.

上面兩種 Template Engine,第一種比較適合 HTML、CSS 的設計與後端邏輯分開,切頁面的時候先不用管邏輯,第二種可能比較時候後端開發的時候一鼓作氣,有種所想即所得的感受。css

而相似 enlive 的 Template Engine 感受比較少見,但這種方式可能更適合前端設計與後端邏輯分開的合做方式。前端設計的時候甚至都不用考慮最後會用數組來填值,因此要寫個 foreach,要不要 if..else 來作個判斷,模板裏甚至均可以直接填上 mock 的值,反正最後渲染頁面的時候這些都會被再處理。html

我比較喜歡這種方式,打算有時間的時候寫一個相似的給 Lua 語言來用。前端

相關文章
相關標籤/搜索