说三道四技术文摘-感悟人生的经典句子
说三道四 > 文档快照

推荐五款流行的JavaScript模板引擎

HTML文档下载 WORD文档下载 PDF文档下载
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是一个不好的模板解决方案。下面例举一例:

Mustache.render("Hello, {{name}}", { name: "Jack" });// 返回: Hello, Jack

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

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

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

<script type="text/x-mustache" id="template">    <p>Hello, {{name}}</p>  </script>

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

var temp = $("#template").html();Mustache.render(temp { name: "Jack" });// 返回: <p>Hello, Jack</p>

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

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

{{#people}}  {{name}}{{/people}}

传递数据:

{ people: [ { name: "Jack" }, { name: "Fred" } ] }

你将得到“JackFred”字符串。

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

2.Underscore Templates


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

_.template("Hello, <%= name %>", { name: "Jack" }); // 返回:Hello, Jack

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

var template = "<% _.each(people, function(name) { %> <li><%=   name %></li> <% }); %>"_.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。

// in template.ejs  Hello, <%= name %>// in JS file  new EJS({ url: "template.ejs" }).render({ name: "Jack" });// 返回: Hello, Jack

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

new EJS({ text: "Hello, <%= name %>" }).render({ name: "Jack" });

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

// template.ejs  <ul>    <% for(var i = 0; i < people.length; i++) { %>      <li><%= link_to(people[i], "/profiles/" + people[i]) %></li>    <% } %>  </ul>// in JS filenew EJS({ url: "template.ejs" }).render({ people: [ "Jack", "Fred" ] })// Each rendered <li> will look like:<li><a href="/profiles/Jack">Jack</a></li>

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

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

4.HandlebarsJS


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

// with this template:  var source = "{{#with author}} <h2>By {{firstName}} {{lastName}}</h2> {{/with}}";  var template = Handlebars.compile(source);  var html = template({ author: { firstName: "Jack", lastName: "Franklin" } });// returns: <h2>By Jack Franklin</h2>

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

 {{ author.firstName}} {{author.lastName}}

而是下面这种形式

 {{#with author}} {{firstName}} {{lastName}} {{/with}}

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

Handlebars也提供了“each”Helper: 

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

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

5.Jade templating


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

// template.jade  p    | Hello,    = name// JS  jade.renderFile("template.jade", { name: "Jack" }, function(err, result) {    console.log(result);    // logs: Hello, Jack  });

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

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

each person in people    li=person

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

<li>Jack</li><li>Fred</li>

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

script(type="text/javascript", src="myfile.js")

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

这里只例举了最流行的五款模板引擎。此外还有很多,希望以该文为起点,帮你找到最适合你自己的模板引擎。

原文链接:The top 5 JavaScript templating engines

莫里航海图,最早的大数据实践 弥补空缺!HappyFox面向iOS开发者发布开源移动HelpDesk SDK Chitika北美网络流量报告:WP KO黑莓、iOS超Android 《近匠》秦时明月:知名IP光环下的生存之道 微软研究院正式发布编程学习游戏Code Hunt 走近讲师:Memblaze刘爱贵讲述云计算中的闪存应用 【云先锋】ClouDil云方案:PB级大数据解决方案 一周消息树:这是要“发”啊?Google Brain之父正式加盟百度 最受欢迎的游戏引擎集结号:小白篇 多盟总设计师邢开捷:四两设计拨千金 Cocos2d-x游戏《Monster Strike》终结《智龙迷城》霸榜神话 高通物联网技术解决方案:从汽车到智慧城市 Arduino携手Atmel 发布Arduino Zero开发板 以色列玫瑰:细数十位科技创新领域的女性佼佼者 8款最佳的开源在线学习CMS系统 在发布站点前,Web开发者需要关注哪些技术细节? TOCC、中航信、高德、北斗平台重磅专家登场 邀您共享ITS技术盛宴 腾讯大数据之TDW计算引擎解析——Shuffle AMD APU14 BEIJING技术创新大会精彩看点 这是云整合时代开始的节奏吗?Rackspace考虑退出 一周热点:如何使用15美元每月的机器实现百万文档检索 黑客获取数据信息的目的和进攻手段及应对之策 Surface Pro 3遭大曝光:799$起、四色可选、12寸屏幕 当软件遇上设计,浅谈敏捷UX VS.精益UX DIY“物联网”——自己动手处理传感器数据 AMD成首家X86+ARM双架构计算 欲寻新蓝海 锤子手机发布:Smartisan T1与其背后的开发团队 第六届中国云计算大会在北京隆重举行 替代笔记本的Surface Pro 3:800g、9.1mm,极致轻薄 PWorld2014:畅谈企业软件向“大平台”+“微应用”变革 微软公司全球资深副总裁张亚勤:云计算引领互联网物理化 如何自动滚动edit控件多行显示时的文字 win2000系统关闭后但不会自动断电源 寻找资料,请帮忙 难啊 统计数据 求:做得漂亮的学校主页 麻烦看一下下面的代码 C#和C++builder比各有什么优缺点?哪一个更灵活更稳定?C#和C++哪个好? bug管理工具有没有web方式的? cs文件中,如何获取confirm对话框的返回值? 如何将jpg的图片加入到sql server 的 image类型的字段中阿,使用ado 配置了win2000的服务器 兄弟们。我在JAVA区竟然得不到答案。只能期望在这里找到帮助了(共200分的问题) 在ACCESS中设置数据表,如何实现数据库中多表间的关联访问,用VC的DAO实现 ORA-12560: TNS:协议适配器错误 vb+asp.net中的datagrid分页遇到问题?附代码 改了IIS账户的密码,ASP不能运行,但原先的密码不记得了!现在要修改什么文件才可以? 为什么反向工程失败? 关于ER图的做法 窗口最大化、最小化问题 本站提供能成为QQ会员的QQ代理,快来~~~ 请帮个忙好吗? 硬盘保护的问题 轻轻地温柔地任人宰割 小程序一个,很简单的,但是这样的问题经常遇到的 关于交换区的问题 d7的序列号码 刚做好的编程技术文章系统,欢迎来翻阅技术文章. ★★★★★ 那位高手有这样的好东东。。。 ★★★★★ 最近流行什么歌? PHP新手: 给一篇在Windows2000环境下PHP的安装,及apache的配置的文章,来者有分 怎么给MM送花 在哪儿下载<WINDOWS 程序设计>? HELP ME!关于TCP/IP传输位图的问题. 刚做好的编程技术文章系统,欢迎来翻阅技术文章. 刚做好的编程技术文章系统,欢迎来翻阅技术文章. 请问怎么在对一个设备发送数据的时候又接受这个设备返回的返回码呢? C++ builder的密码! 如何使用微软自带的扑克牌动态库(crads.dll)? 哪里可以得到teechart pro5? 刚做好的编程技术文章系统,欢迎来翻阅技术文章. 大哥好,我向大家要个数据库,高分求救 这是条什么内存??? 怎样改变上传附件“浏览”按钮的颜色? 请问怎样显示动态的时间? 如何理解? JBuilder 7中如何增加一个Server 三层结构(delphi)中应用服务器如何调用其他模块的方法? JBuilder 7中如何增加一个新的Server 想买一款80G的硬盘,各位推荐一下哪个牌子的质量比较好! 哪儿有JDK1.41下,要速度快的。 i saw him ____ the supermarket just nowA,go b,come c,enter d,arrive 我相信你能做到 英语 钓鱼英文怎么说 我相信你有能力做好那份工作 I believe you ___ ____ ____ ____ ____ the job well. 谁能把‘般若波罗蜜多心经’翻译成白话文 你不能钓鱼用英语怎么表示 i believe you什么意思 《般若波罗蜜多心经》玄奘译本翻译 风筝 文本中说的“对于精神的虐杀”的这一幕,具体指什么 技术创新对产业产业组织结构的变化有什么影响?有点急,谁知道我给加分. 般若波罗蜜多心经现代文翻译,急, If I were a game,so people all over the world like me,right.This sentence. 如何评价上海产业结构发生的变化?评价的理由是什么?速 如何评价上海产业结构发生的变化?评价的理由是什么?速 线代的通过方程求出来的特值比如A平方=E,特值是正负1.但是单位阵特值都是1,也符合A平方=E,没有-1, I would have stayed at home,but I ____ you were coming to see me.A.haven't known B.would have knownC.hadn't known D.didn't know请帮忙详细说明选某项的原因ABC都是错的 阐述人类需求如何对三次产业结构的变化产生影响 求解下列方程(线代)行列式 | 1 1 1 1 || x a b c || x^2 a^2 b^2 c^2| =0,其中a,b,c互不相等| x^3 a^3 b^3 c^3| soppose you were an inventor what would you like to invent? People usually hate mice,but people almost all over the world like one mouse----- the famous Mickey Mouse.Fifty years ago,most films had no sounds.A man called Walt Disney made a cartoon mouse.The cartoon mouse could talk in these films.He named his People eat hamburgers and hot dogs all over the world.翻译成中文 线代非齐次方程解的结构与性质?设A是秩为3的5*4矩阵.a1,a2,a3是非齐次线性方程组Ax=b的三个不同的解,若a1+a2+2a3=(2,0,0,0,)^T,3a1+a2=(2,4,6,8)^T,则方程组Ax=b的通解是?三个不同的解的加法线性组合是否 本人的女儿急需一篇关于茉莉花的描写的作文.字数在500字左右. 钓一条鱼中译英钓是fish吗? 关于矩阵方程的 "六级568,BEC中级A,BEC高级B" 请我这种情况,考口译可以直接考二级口译吗,我怕浪费钱!”尤其是内行的哥哥姐姐们, 组句:eat,hot dogs,all,people,hamburgers,the,over,and,world如题. 英语翻译内容为:还记得我吗?远在德国的你过的好吗?你的家人每天都快乐吗?很久没跟你联系了,先说声对不起.听说你要来中国了,我非常的期待.期待你的到来.最美好的祝福,××× 茉莉如何描写 1 usually,food,people,with,cut,knife,the.2 all,the,hamburgers,people,eat,over,world.3 please,I,may,a,spoon,have?4 wipe,please,mouth,your.连词成句 英语翻译在信中你的中文令我大吃一惊.我知道你肯定非常努力的在学习中文.我正在为你安排你的行程.我非常希望你能在中国的一个星期中,能领略到中国的美丽之处.我的家庭和我一定会给 when i saw him,he was doing his homework in the classroom 同义句I saw —— ——his homework in the classroom 连词成句:the,Chinese,spring,over,people,all,world,enjoy,festival拜托了各位 谢谢 “你钓了多少条鱼”的英语怎么读?.注意:要用小学生的程度! The book was read by many people all over the world请高手翻译全句.词组写下来本人总是看不同顺.all over the world。all over Yesterday the police were joinedby more than 20 volunteers有关阅读理解 what______do you do?(job,work) 为什么答案是job? i,was,just,now,doing,homework Yesterday the police were joined by more than 20 volunteers in the continuin 狼王梦书评怎么写给个思路或提纲 I helped him _____ his homework.A.doing B.do C.did D.does Yesterday the police were joined by more than 20 volunteers in the continuing search for the two missing teenagers,Vicky Gray and Tom Hunter,and their guide,Gavin Jones.The police said that they had disappeared during an adventure tour of Cape York P what job do you 上海居民用电价格第一档用完还有电吗 Believe that you可以变成Believe you么 读了 狼王梦 ,你对母狼紫岚的做法有何评价,为什么? 心经里的“是诸法空相”有什么含义? 我国人口环境变化有哪些主要趋势?(市场营销学问题) 【狼王梦】的好段 I have a very h. life, h.填什么单词?是初一下What time do you go to school的知识,谢谢了! 大家对职业司机的前景有什么看法? He is looking forward to her return as much as she herself to seeing him.请问这句话的并列对吗?还是这样才是对的.He is looking forward as much to her return as she herself to seeing him.谢谢!并列句as ...as 一定要有对等的 I have a very h.life,h.是什么单词,是初一下What time do you go to school 的 你对改变一个人对工作的态度有什么建议?请阐述你的观点? have good time反义词是什么 I believe you 是我相信你说的话 我相信你这个人 怎么说如题 也是I..you part-time work for college students does have some unique restiction的翻译 般若波罗密多心经有没有中文翻译,是什么? 我相信你说的话.I __________what you said.是填 believe 还是 believe in?为什么? Taecher should allow students have enough free time(改为被动语态) The work can be finished by leo 钓鱼的英文怎么写
备案号:鲁ICP备13029499号-2 说三道四 www.s3d4.cn 说三道四技术文摘