Handlebars 简介
Handlebars 是什么
Handlebars
是一种简单的模板语言。
它使用模板与传入的对象来生成HTML
或者其他文本格式。
Handlebars
模板看起来像是嵌入了handlebars
表达式的普通文本。
<p> {{firstname}} {{lastname}}</p>
一个handlebars
表达式是使用两对尖括号包裹一些内容:{{some contet}}
。当模板被执行时,表达式中的内容将被来自输入的对象中的值所替换。
安装
使用Handlebars
最快的方式就是从CDN
加载它并且将它嵌入HTML
文件。
<!--从CDN引入Handlebars -->
<script src="https://cdn.jsdelivr.net/npm/handlebars@latest/dist/handlebars.js"></script>
<script>// 编译模板var template = Handlebars.compile("Handlebars <b>{{doesWhat}}</b>");// 执行编译后的模板并将内容输出到控制台console.log(template({ doesWhat: "rocks!" }));
</script>
语言特性
简洁的表达式
正如前面所展示的,下面的模板定义了两个Handlebars
表达式
<p> {{firstname}} {{lastname}}</p>
如果输入的数据对象如下:
{firstname: "Yehuda",lastname: "Katz"
}
表达式将被对应的属性所替换,结果如下:
<p> Yehuda Katz</p>
可嵌套的数据对象
有时,输入的数据对象还可以包含嵌套其它数组或对象,比如:
{person: {firstname: "Yehuda",lastname: "Katz"}
}
在这个例子中,你可以使用点语法来访问嵌套的属性
{{person.firstname}} {{person.lastname}}
可变执行上下文
内置的块辅助器each
,with
允许您更改当前的执行上下文
with
辅助器潜入一个对象的属性,让你可以访问它的属性
{{#with person}}
{{firstname}} {{lastname}}
{{/with}}
{person:{firstname:"Yehuda",lastname:"katz"}
}
each
辅助器可以迭代一个数组,允许你通过简单的handlebars
表达式访问数组中每一个对象的属性
<ul class="people_list">{{#each people}}<li>{{this}}</li>{{/each}}
</ul>
{people: ["Yehuda Katz","Alan Johnson","Charles Jolley"]
}
模板注释
你可以在handlebars
代码中使用注释,就像在普通代码中使用注释一样。由于通常存在某种程度的逻辑,所以这是一个很好的实践。
注释将不会作为结果输出。你也许希望可以将注释显示出来,那么直接使用html
注释就可以了。
任何必须包含}}
或其他handlebars
标记的注释都应该使用{{!- - - - -}}
语法
{{! 这条注释将不会输出}}
<!-- 这条注释将作为HTML注释显示出来 -->
{{!-- 这条注释可能包含 }} --}}
自定义辅助器
Handlebars
辅助器可以在模板的任意上下文位置访问,你可以使用Handlebars.registerHelper
方法来注册一个辅助器。
{{firstname}} {{loud lastname}}
Handlebars.registerHelper('loud', function (aString) {return aString.toUpperCase()
})
{firstname: "Yehuda",lastname: "Katz"
}
输出:
Yehuda KATZ
辅助器可以接收最近的上下文来作为this
的值:
{{#each people}}{{print_person}}
{{/each}}
Handlebars.registerHelper('print_person', function () {return this.firstname + ' ' + this.lastname
})
{people: [{firstname: "Nils",lastname: "Knappmeier"},{firstname: "Yehuda",lastname: "Katz"}]
}
输出结果:
Nils Knappmeier
Yehuda Katz
区块辅助器
区块表达式允许你定义辅助器,这些辅助器将使用与当前上下文不同的上下文来调用模板的一部分。
这些区块辅助器在辅助对象名称之前以#
标识,并且需要匹配后面具有相同名称的闭合符号/
。让我们来看一个将生成HTML
列表的辅助器:
Handlebars.registerHelper("list", function(items, options) {const itemsAsHtml = items.map(item => "<li>" + options.fn(item) + "</li>");return "<ul>\n" + itemsAsHtml.join("\n") + "\n</ul>";
});
{{#list people}}{{firstname}} {{lastname}}{{/list}}
{people: [{firstname: "Yehuda",lastname: "Katz"},{firstname: "Carl",lastname: "Lerche"},{firstname: "Alan",lastname: "Johnson"}]
}
输出结果:
<ul>
<li>Yehuda Katz</li>
<li>Carl Lerche</li>
<li>Alan Johnson</li>
</ul>
这个例子中,我们创建了一个名为list
的辅助器,我们用它来生成HTML
列表。这个辅助器接收people
作为它的第一个参数,接收类型为散列的options
作为第二个参数。在options
中包含一个名为fn
的属性, 您可以通过上下文调用它,就像调用普通的Handlebars
模板一样。
区块辅助器还具有很多特性,比如创建一个else
区块(使用内建的if
辅助器)
由于区块辅助器的内容在调用options.fn(context)
时被转义,所以Handlebars
不会转义区块辅助器的结果。否则,内部内容将会被重复转义。
HTML转义
因为Handlebars
最初被设计成生成HTML
,所以它通过{{expression}}返回的值来转义。如果你不想转义一个值,使用"三对尖括号",{{{
。
不转义: {{{specialChars}}}
HTML转义后: {{specialChars}}
{ specialChars: "& < > \" ' ` =" }
输出结果:
不转义: & < > " ' ` =
HTML转义后: & < > " ' ` =
Handlebars
不会转义一个Handlebars.SafeString
。如果你写了一个辅助器去生成HTML
,你可以返回一个new Handlebars.SafeString(result)
。在这种情况下,需要手动转义参数。
{{bold text}}
Handlebars.registerHelper("bold", function(text) {var result = "<b>" + Handlebars.escapeExpression(text) + "</b>";return new Handlebars.SafeString(result);
});
{ text: "Isn't this great?" }
输出结果:
<b>Isn't this great?</b>
这将转义传入的参数,但将响应标记为安全,因此即使没有使用“三重尖括号”,Handlebars
也不会试图转义它
片段
Handlebars
的片段允许你创建共享模板来实现代码重用。你可以使用registerPartial
方法来注册一个片段
Handlebars.registerPartial("person", "{{person.name}} is {{person.age}} years old.\n"
)
{{#each persons}}{{>person person=.}}
{{/each}}
{persons: [{ name: "Nils", age: 20 },{ name: "Teddy", age: 10 },{ name: "Nelson", age: 40 }]
}
输出:
Nils is 20 years old.Teddy is 10 years old.Nelson is 40 years old.
内建辅助器
Handlebars
提供了丰富的内建辅助器,比如if
条件辅助器和each
迭代辅助器。
API指南
Handlebars
为应用和辅助器提供了丰富的API
和实用的方法
Handlebars 简介相关推荐
- hbs模板(zmaze ui用的)
hbs模板(zmaze ui用的) 一.总结 1.模板引擎:就是来生成界面的啊,只不过实现了view和数据分离以及一些其它的功能(预加载等). 2.Handlebars :但他是一个单纯的模板引擎,在 ...
- java handlebars_Handlebars 模板引擎之前后端用法
前言 不知不觉间,居然已经这么久没有写博客了,坚持还真是世界上最难的事情啊. 不过我最近也没闲着,辞工换工.恋爱失恋.深圳北京都经历了一番,这有起有落的生活实在是太刺激了,就如拿着两把菜刀剁洋葱一样, ...
- Express框架简介、express使用模块引擎、模式数据
Express简介: 原生的http不足以应对我们的开发需求,所以我们需要使用框架来加快我们的开发,这里推荐expressjs,其官网:expressjs.com,中文文档推荐:http://java ...
- amazeui学习笔记二(进阶开发2)--Web组件简介Web Component
amazeui学习笔记二(进阶开发2)--Web组件简介Web Component 一.总结 1.amaze ui:amaze ui是一个web 组件, 由模板(hbs).样式(LESS).交互(JS ...
- Handlebars.js使用介绍
原文:Learn Handlebars in 10 Minutes or Less 翻译:前端开发whqet, 意译为主,不当之处敬请指正. 作者简介:Danny Markov ,Tutorialzi ...
- 10分钟快速学Handlebars
前端开发whqet,csdn,王海庆,whqet,前端开发专家 原文:Learn Handlebars in 10 Minutes or Less 翻译:前端开发whqet, 意译为主,不当之处敬请指 ...
- DayDayUp:Markdown编辑器的简介、入门、使用方法(Markdown编辑器撰写博客)
DayDayUp:Markdown编辑器的简介.入门.使用方法(Markdown编辑器撰写博客) 目录 Markdown编辑器简介 Markdown编辑器入门 Markdown常用语法 Markdow ...
- Cookiecutter: 更好的项目模板工具:(1)简介及可用资源汇总
原文档地址:https://cookiecutter.readthedocs.io/en/latest/ 本系列只介绍cookiecutter的基础使用,而且会删除与功能使用无关的部分.深度使用及了解 ...
- Go: 微服务框架 Fiber 简介与实践
文章目录 简介 1. 微服务 2. Fiber? Fiber集成及使用 1.安装fiber 2. 简单使用 3.简单实例 小结 简介 1. 微服务 微服务或微服务架构是一种体系结构风格,可以将应用程序 ...
最新文章
- SAP PM入门系列32 - S_ALR_87013432 Display Confirmations
- JS去除字符串左右两端的空格
- 面试经历—广州YY(欢聚时代)
- linux下c语言俄罗斯方块,c语言做俄罗斯方块
- 这是我用Microsoft Word 2010 直接发布的测试用博客
- 个人的中小型项目前端架构浅谈(转)
- NQL.Net 简介
- 22. javacript高级程序设计-高级技巧
- 微信小程序单指拖拽和双指缩放旋转
- linux定时任务的设置 crontab 配置指南
- Android 测试
- 汽车用众大牌大屏幕导航仪凯立德地图升级方法
- 上海南京路步行街向全球征集标识Logo及吉祥物设计
- Magisk使用记录
- 使用Boostrap制作导航栏和汉堡按钮
- halcon基本操作
- 迷你旅游网——旅游线路用名称查询以及查看详情(完成查询条件不确定性的定义模板方式解决...)
- Kafka多个消费者监听消费同一个Topic主题
- 【Monkey测试】手机app测试性能测试,Monkey测试详解(全)
- “炁”、“气”、“氣”