关于 Template Engine

周末有点时间,找了些代码来看。最近在学 clojure,于是看了个 clojure 的项目,叫 enlive 的项目(https://github.com/cgrand/enlive)。这是一个 clojure 写的 HTML Template Engine。其特色是可以通过类似 jquery 选择器的方法选取模板中的元素,然后修改元素的值、属性、css 类和文本内容等。这种渲染模板的方式,至少对我来说是比较新的,以前见过的 Template Engine,大概就这么两种:

  • 类似 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 的设计与后端逻辑分开,切页面的时候先不用管逻辑,第二种可能比较时候后端开发的时候一气呵成,有种所想即所得的感觉。

而类似 enlive 的 Template Engine 感觉比较少见,但这种方式可能更适合前端设计与后端逻辑分开的合作方式。前端设计的时候甚至都不用考虑最后会用数组来填值,所以要写个 foreach,要不要 if..else 来做个判断,模板里甚至都可以直接填上 mock 的值,反正最后渲染页面的时候这些都会被再处理。

我比较喜欢这种方式,打算有时间的时候写一个类似的给 Lua 语言来用。

转载于:https://my.oschina.net/u/1412485/blog/182894

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值