摘要:Javascript模板引擎作为数据与界面分离工作中最重要一环,受到开发者广泛关注。本文通过开发实例解析五款流行模板引擎:Mustache、Underscore Templates、Embedded JS Templates、HandlebarsJS、Jade templating。

近日一位20岁的开发者Jack Franklin在《The top 5 JavaScript templating engines》一文中向开发者们推荐了5款流行的JavaScript模板引擎。下面为该文的译文。

当你创建JavaScript应用时,你必然会用到JavaScript模板。当对HTML进行更新时,你可使用模板来代替库(如jQuery),使用模板可以大大简化你的代码。该文将例举当前较流行的一些模板库。

1.Mustache

Mustache通常被称为JavaScript模板的基础。另一个流行的解决方案Hanldebars实际上就是基于Mustache构建而成的。这并不意味着Mustache是一个不好的模板解决方案。下面例举一例:

[js] view plaincopy
  1. Mustache.render("Hello, {{name}}", { name: "Jack" });
  2. // 返回: Hello, Jack

一旦在页面中包含了Mustache,你就可以访问全局对象“Mustache”。你可使用其中最主要的方法“render”,它包含两个参数。首个参数是实际的模板,第二个参数则为需要传入的参数值。

上例中,你可以看见“{{name}}”。其中的“{{}}”实际上为Mustache的语法,表示一个占位符。当Mustache对其进行编译时,它将在传入的对像中寻找“name”属性,并用该属性的值(该例中为“Jack”)来代替“{{name}}”。

在这里,模板只为一个字符串,但如果你有一个更复杂的模板,该方法可能就不适用了。通常的解决方案是将模板放在“script”标签中:

[js] view plaincopy
  1. <script type="text/x-mustache" id="template">
  2. <p>Hello, {{name}}</p>
  3. </script>

然后,我们可以访问的script标签的内容。例如,使用jQuery,它很容易实现:

[js] view plaincopy
  1. var temp = $("#template").html();
  2. Mustache.render(temp { name: "Jack" });
  3. // 返回: <p>Hello, Jack</p>

给“script”一个浏览器无法理解的“type”属性,浏览器就会忽略该Script,不将它作为JavaScript,也不会执行它。

你也可在模板中使用循环,如下面这个模板:

[js] view plaincopy
  1. {{#people}}
  2. {{name}}
  3. {{/people}}

传递数据:

[js] view plaincopy
  1. { people: [ { name: "Jack" }, { name: "Fred" } ] }

你将得到“JackFred”字符串。

Mustache还有更多的功能,点击这里查看详情。

2.Underscore Templates

Underscore提供了各种各样的有用的方法,也提供了简单的模板。它的语法与Mustache稍有不同。下面为一个简单案例:

[js] view plaincopy
  1. _.template("Hello, <%= name %>", { name: "Jack" });
  2. // 返回:Hello, Jack

如果你曾经使用过Embedded Ruby(缩写为ERB),你就会对该语法更为熟悉。“<%=name%>”表示无论“name”是什么值,都应该输出在“<%=name%>”的位置。Underscore同样有循环与条件语句,但与Mustache同样稍有不同。

[js] view plaincopy
  1. var template = "<% _.each(people, function(name) { %> <li><%=   name %></li> <% }); %>"
  2. _.template(template, { people: ["Jack", "Fred"] } );

在Underscore模板中,你可以在“<% %>”是插入任何JavaScript。注意,“<%= %>”用于输出,<% %>用来包含JavaScript。这意味着你在JS中使用的任何形式的循环与条件语句同样可以在Underscore中使用。

了解Underscore更多功能,请点击这里查看。

3.Embedded JS Templates

Embedded JS(EJS) 来源于ERB模板,且与ERB有很多相似之处。它有着与ERB相同的Tag,且包含很多相同的功能。

EJS的特别之处在于,你需要把模板存于单独文件中,并将文件名传递给EJS。它会加载该文件,并返回HTML。

[js] view plaincopy
  1. // in template.ejs
  2. Hello, <%= name %>
  3. // in JS file
  4. new EJS({ url: "template.ejs" }).render({ name: "Jack" });
  5. // 返回: Hello, Jack

注意,你可以加载文本模板:

[js] view plaincopy
  1. new EJS({ text: "Hello, <%= name %>" }).render({ name: "Jack" });

下面将介绍如何进行循环,以数组“People”为例,并在网站上链接到他们的个人页面:

[js] view plaincopy
  1. // template.ejs
  2. <ul>
  3. <% for(var i = 0; i < people.length; i++) { %>
  4. <li><%= link_to(people[i], "/profiles/" + people[i]) %></li>
  5. <% } %>
  6. </ul>
  7. // in JS file
  8. new EJS({ url: "template.ejs" }).render({ people: [ "Jack", "Fred" ] })
  9. // Each rendered <li> will look like:
  10. <li><a href="/profiles/Jack">Jack</a></li>

这与Underscore 有些相似,但要注意“link_to”的使用。它是EJS定义的一个Helper,以便链接更容易使用。

了解更多EJS,请关注EJS官方网站。

4.HandlebarsJS

Handlebars为最流行的模板引擎之一,构建于Mustache之上。适用于Mustache模板的功能同样适用于Handlebars模板。同时,Handlebars还增加了很多Helper。其中之一是“With”。

[js] view plaincopy
  1. // with this template:
  2. var source = "{{#with author}} <h2>By {{firstName}} {{lastName}}</h2> {{/with}}";
  3. var template = Handlebars.compile(source);
  4. var html = template({ author: { firstName: "Jack", lastName: "Franklin" } });
  5. // returns: <h2>By Jack Franklin</h2>

注意,Handlebars编译器的工作方式略有不同。首先,你把该模板传递给“Handlebars.compile”,它会返回一个函数。你将包含数据的对象传递给该函数,该函数将返回HTML。“{#with}}”Helper取得一个对象,并允许你在其中向该对象传递属性。但不是采用以下形式:

[js] view plaincopy
  1. {{ author.firstName}} {{author.lastName}}

而是下面这种形式

[js] view plaincopy
  1. {{#with author}} {{firstName}} {{lastName}} {{/with}}

这样可以节约输入,尤其当你十分频繁地使用它时。

Handlebars也提供了“each”Helper:

[js] view plaincopy
  1. var source = "{{#each people}} {{name}} {{/each}}";
  2. var template = Handlebars.compile(source);
  3. var html = template({ people: [{ name: "Jack" }, { name: "Fred" }] });
  4. //返回: "JackFred"

此外,你还可以使用自己的方法来扩展Handlebars,具体方法可参与该文档。

5.Jade templating

随着Node.js的流行及大量Web应用构建于它之上,现在已有很多模板被设计用于服务器端。Jade模板与我们目前为止看到的大不相同,它依靠大量的缩进与空格。下面看一例:

[js] view plaincopy
  1. // template.jade
  2. p
  3. | Hello,
  4. = name
  5. // JS
  6. jade.renderFile("template.jade", { name: "Jack" }, function(err, result) {
  7. console.log(result);
  8. // logs: Hello, Jack
  9. });

首次看到Jade可能会让你不舒服,但你会很快适应它。在“p”下面缩进两个字符,表明这两个字符存在于“p”内。“|”用来告知Jade,该行是需要输出的纯文本;“=”用来告知Jade寻找一个名为“name”的变量。

我们同样可以在Jade中使用循环:

[js] view plaincopy
  1. each person in people
  2. li=person

调出存储名字的数组:{ people: [ "Jack", "Fred" ]},它将输出:

[html] view plaincopy
  1. <li>Jack</li><li>Fred</li>

Jade具有很多其他模板所不具有的功能。它也可以做诸如输出Script标签此类的事:

[js] view plaincopy
  1. script(type="text/javascript", src="myfile.js")

了解更多Jade templating功能,请点击这里查看。

这里只例举了最流行的五款模板引擎。此外还有很多,希望以该文为起点,帮你找到最适合你自己的模板引擎。(编译:陈秋歌 审校:夏梦竹)

原文链接:The top 5 JavaScript templating engines

http://www.csdn.net/article/2013-09-16/2816951-top-five-javascript-templating-engines

【JavsScript】推荐五款流行的JavaScript模板引擎相关推荐

  1. if laytpl 非_laytpl : 一款非常轻量的JavaScript模板引擎

    //假设你得到了这么一段数据 var data = { title: '前端圈', intro: '一群码js的骚年,幻想改变世界,却被世界改变.', list: [{name: '贤心', city ...

  2. 13 款 JavaScript 模板引擎

    JavaScript 在生成各种页面内容时如果能结合一些模板技术,可以让逻辑和数据之间更加清晰,本文介绍 X 款 JavaScript 的模板引擎.(排名不分先后顺序) 1. Mustache 基于j ...

  3. 软件:推荐五款超级好用的电脑小众软件,值得收藏!

    今天给大家推荐五款超级好用的电脑小众软件,希望对大家能够有所帮助! 1.HoneyView 看图神器 HoneyView 看图软件,打开速度非常快,一般电脑保存的图片都能用它打开.目前只有Window ...

  4. 开学季哪些数码产品值得一看?开学季推荐五款值得入手的好物

    眼看着开学季即将到来,相信学子们也是做好了踏入校园生活的准备.面对即将到来的校园生活,大家除开准备好了需要更换的衣物以外,一些常用的数码产品也是必不可少的.作为一名数码爱好者,今天就为大家来推荐五款开 ...

  5. 适合平板用的Android版本,安卓平板专享 推荐五款Pad版应用浏览器

    平板市场,硝烟四起,各品牌展开混战,杀得是你死我活,都想要自己分到手的蛋糕多一点.同样的,网络浏览器市场也竞争激烈,各软件商争相抢出Pad版或HD版浏览器,让用户的选择多了起来.今天,笔者就在此推荐五 ...

  6. 推荐一款优秀的简历模板

    今天给大家推荐一款好用的简历模板 -- ResumeSample,希望对正在求职的或打算跳槽的小伙伴有所帮助. 该项目在 GitHub 上有着接近 25K Star 的简历模板,可见在技术圈内有着非常 ...

  7. 【转】推荐五款支持外链的免费网盘

    推荐五款支持外链的免费网盘 为什么是国外网盘呢,因为相对于国内网盘的服务.稳定和信誉来说,国外网盘实在是好太多太多了. 为什么要推荐呢,因为他们支持外联地址,所以你的歌,你的图片等等都可以放上来,然后 ...

  8. 推荐五款免费的开源软件,总有一款适合你

    今天我为大家推荐五款不同类型的开源软件,它们都是免费的,而且有着各自的特色和优势. 1.系统优化--BleachBit BleachBit是一个开源的系统清理和优化软件,可用于清理系统垃圾.保护隐私和 ...

  9. 购买全光谱的灯对人体有什么伤害?推荐五款护眼台灯

    全光谱照明灯能不能护眼是有科学依据的.我们人类都在自然光条件下长大发育的.所以自然光与我们的眼睛充分贴合,太阳光的全光谱照射,能够让我们感觉色彩跟家真实舒适,起到护眼效果. 那什么是全光谱 全光谱就是 ...

最新文章

  1. OpenCV(实战)二值图颜色填充(彩色图形、硬币)
  2. 深度学习4:使用MNIST数据集(tensorflow)
  3. 大整数乘法(POJ2389)
  4. LINUX服务器开启防火墙并屏蔽恶意IP
  5. 山师计算机试题答案,山师计算机应用技术试题及答案
  6. java 简单的加法 递归 从A加到B
  7. java jlabe_[求助]JPanel上怎么移除JLabe。l
  8. HDU 1002 大整数
  9. 蓝桥杯 ADV-118 算法提高 3-2字符串输入输出函数
  10. Java经典算法题(一,kafka权威指南百度网盘
  11. Redis 菜鸟教程学习笔记- Redis 配置
  12. 楷书书法规则_楷书笔画书写八大规律
  13. Aerial Cactus Identification(空中仙人掌鉴定)
  14. Code Review之前中后
  15. 选择阿里云服务器的理由
  16. windows下Graphviz安装及入门教程(附下载链接)
  17. 旅游评论情感分析(1)---爬虫(json篇)
  18. iOS调用系统通讯录获取姓名电话号码
  19. OUC软件开发实验4
  20. 计算机系统的图形图像编码方式,只有将数字、文字、图像、声音和视频等不同类型的信息转换成_______代码,才便于计算机加工和处理。...

热门文章

  1. 本硕非科班,单模型获得亚军!
  2. kaggle、TDS、arXiv等,我最喜欢的数据科学资源
  3. 风控特征—关系网络特征工程入门实践
  4. 医学顶刊BMJ打脸谷歌:AI取代医生检测乳腺癌还远着呢
  5. 达摩院清华博士研发了一个AI摸鱼神器!有了它,老板都不好意思打扰你
  6. 一周内,在闲鱼上被疯狂转了 2 万次的 Linux 命令大全!!!
  7. 为给微芯片拍照,IBM小哥用乐高拼了个电动显微镜,搭载树莓派,360度无死角拍摄...
  8. “考研3次,读博7年,英语极烂”,他却做出诺奖级成果
  9. python轨迹追踪、全链路日志追踪trace_id实现
  10. Numpy中矩阵运算