以文本方式查看主题 - 搭建论坛 (http://bbs.diylsoft.com:8118/starforum/index.asp) -- 读者文摘 (http://bbs.diylsoft.com:8118/starforum/list.asp?boardid=10) ---- 【推荐】五款流行的JavaScript模板引擎 (http://bbs.diylsoft.com:8118/starforum/dispbbs.asp?boardid=10&id=32585) |
||||||||||||||||||||||||||||||||||||
-- 作者:jsphp -- 发布时间:2013-9-23 9:13:50 -- 【推荐】五款流行的JavaScript模板引擎 摘要: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,你就可以访问全局对象“Mustache”。你可使用其中最主要的方法“render”,它包含两个参数。首个参数是实际的模板,第二个参数则为需要传入的参数值。 上例中,你可以看见“{{name}}”。其中的“{{}}”实际上为Mustache的语法,表示一个占位符。当Mustache对其进行编译时,它将在传入的对像中寻找“name”属性,并用该属性的值(该例中为“Jack”)来代替“{{name}}”。 在这里,模板只为一个字符串,但如果你有一个更复杂的模板,该方法可能就不适用了。通常的解决方案是将模板放在“script”标签中:
然后,我们可以访问的script标签的内容。例如,使用jQuery,它很容易实现:
给“script”一个浏览器无法理解的“type”属性,浏览器就会忽略该Script,不将它作为JavaScript,也不会执行它。 你也可在模板中使用循环,如下面这个模板:
传递数据:
你将得到“JackFred”字符串。 Mustache还有更多的功能,点击这里查看详情。 Underscore提供了各种各样的有用的方法,也提供了简单的模板。它的语法与Mustache稍有不同。下面为一个简单案例:
如果你曾经使用过Embedded Ruby(缩写为ERB),你就会对该语法更为熟悉。“<%=name%>”表示无论“name”是什么值,都应该输出在“<%=name%>”的位置。Underscore同样有循环与条件语句,但与Mustache同样稍有不同。
在Underscore模板中,你可以在“<% %>”是插入任何JavaScript。注意,“<%= %>”用于输出,<% %>用来包含JavaScript。这意味着你在JS中使用的任何形式的循环与条件语句同样可以在Underscore中使用。 了解Underscore更多功能,请点击这里查看。 Embedded JS(EJS) 来源于ERB模板,且与ERB有很多相似之处。它有着与ERB相同的Tag,且包含很多相同的功能。 EJS的特别之处在于,你需要把模板存于单独文件中,并将文件名传递给EJS。它会加载该文件,并返回HTML。
注意,你可以加载文本模板:
下面将介绍如何进行循环,以数组“People”为例,并在网站上链接到他们的个人页面:
这与Underscore 有些相似,但要注意“link_to”的使用。它是EJS定义的一个Helper,以便链接更容易使用。 了解更多EJS,请关注EJS官方网站。 Handlebars为最流行的模板引擎之一,构建于Mustache之上。适用于Mustache模板的功能同样适用于Handlebars模板。同时,Handlebars还增加了很多Helper。其中之一是“With”。
注意,Handlebars编译器的工作方式略有不同。首先,你把该模板传递给“Handlebars.compile”,它会返回一个函数。你将包含数据的对象传递给该函数,该函数将返回HTML。“{#with}}”Helper取得一个对象,并允许你在其中向该对象传递属性。但不是采用以下形式:
而是下面这种形式
这样可以节约输入,尤其当你十分频繁地使用它时。 Handlebars也提供了“each”Helper:
此外,你还可以使用自己的方法来扩展Handlebars,具体方法可参与该文档。 随着Node.js的流行及大量Web应用构建于它之上,现在已有很多模板被设计用于服务器端。Jade模板与我们目前为止看到的大不相同,它依靠大量的缩进与空格。下面看一例:
首次看到Jade可能会让你不舒服,但你会很快适应它。在“p”下面缩进两个字符,表明这两个字符存在于“p”内。“|”用来告知Jade,该行是需要输出的纯文本;“=”用来告知Jade寻找一个名为“name”的变量。 我们同样可以在Jade中使用循环:
调出存储名字的数组:{ people: [ "Jack", "Fred" ]},它将输出:
Jade具有很多其他模板所不具有的功能。它也可以做诸如输出Script标签此类的事:
了解更多Jade templating功能,请点击这里查看。 这里只例举了最流行的五款模板引擎。此外还有很多,希望以该文为起点,帮你找到最适合你自己的模板引擎。(编译:陈秋歌 审校:夏梦竹) |
||||||||||||||||||||||||||||||||||||
-- 作者:李国辉 -- 发布时间:2013-9-24 9:54:55 -- 学习,和《搭建》融合会更好! |
||||||||||||||||||||||||||||||||||||
-- 作者:徐宇1915 -- 发布时间:2017-5-3 23:03:33 -- 不错,支持下! 太阳照亮人生的路,月亮照亮心灵的路。 川岛除湿机 http://www.kawasima.cn小店出售各类空气处理设备,淘宝店铺搜索“方凌电器”就可以找到。 |