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转义后: &amp; &lt; &gt; &quot; ' ` =

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 简介相关推荐

  1. hbs模板(zmaze ui用的)

    hbs模板(zmaze ui用的) 一.总结 1.模板引擎:就是来生成界面的啊,只不过实现了view和数据分离以及一些其它的功能(预加载等). 2.Handlebars :但他是一个单纯的模板引擎,在 ...

  2. java handlebars_Handlebars 模板引擎之前后端用法

    前言 不知不觉间,居然已经这么久没有写博客了,坚持还真是世界上最难的事情啊. 不过我最近也没闲着,辞工换工.恋爱失恋.深圳北京都经历了一番,这有起有落的生活实在是太刺激了,就如拿着两把菜刀剁洋葱一样, ...

  3. Express框架简介、express使用模块引擎、模式数据

    Express简介: 原生的http不足以应对我们的开发需求,所以我们需要使用框架来加快我们的开发,这里推荐expressjs,其官网:expressjs.com,中文文档推荐:http://java ...

  4. amazeui学习笔记二(进阶开发2)--Web组件简介Web Component

    amazeui学习笔记二(进阶开发2)--Web组件简介Web Component 一.总结 1.amaze ui:amaze ui是一个web 组件, 由模板(hbs).样式(LESS).交互(JS ...

  5. Handlebars.js使用介绍

    原文:Learn Handlebars in 10 Minutes or Less 翻译:前端开发whqet, 意译为主,不当之处敬请指正. 作者简介:Danny Markov ,Tutorialzi ...

  6. 10分钟快速学Handlebars

    前端开发whqet,csdn,王海庆,whqet,前端开发专家 原文:Learn Handlebars in 10 Minutes or Less 翻译:前端开发whqet, 意译为主,不当之处敬请指 ...

  7. DayDayUp:Markdown编辑器的简介、入门、使用方法(Markdown编辑器撰写博客)

    DayDayUp:Markdown编辑器的简介.入门.使用方法(Markdown编辑器撰写博客) 目录 Markdown编辑器简介 Markdown编辑器入门 Markdown常用语法 Markdow ...

  8. Cookiecutter: 更好的项目模板工具:(1)简介及可用资源汇总

    原文档地址:https://cookiecutter.readthedocs.io/en/latest/ 本系列只介绍cookiecutter的基础使用,而且会删除与功能使用无关的部分.深度使用及了解 ...

  9. Go: 微服务框架 Fiber 简介与实践

    文章目录 简介 1. 微服务 2. Fiber? Fiber集成及使用 1.安装fiber 2. 简单使用 3.简单实例 小结 简介 1. 微服务 微服务或微服务架构是一种体系结构风格,可以将应用程序 ...

最新文章

  1. SAP PM入门系列32 - S_ALR_87013432 Display Confirmations
  2. JS去除字符串左右两端的空格
  3. 面试经历—广州YY(欢聚时代)
  4. linux下c语言俄罗斯方块,c语言做俄罗斯方块
  5. 这是我用Microsoft Word 2010 直接发布的测试用博客
  6. 个人的中小型项目前端架构浅谈(转)
  7. NQL.Net 简介
  8. 22. javacript高级程序设计-高级技巧
  9. 微信小程序单指拖拽和双指缩放旋转
  10. linux定时任务的设置 crontab 配置指南
  11. Android 测试
  12. 汽车用众大牌大屏幕导航仪凯立德地图升级方法
  13. 上海南京路步行街向全球征集标识Logo及吉祥物设计
  14. Magisk使用记录
  15. 使用Boostrap制作导航栏和汉堡按钮
  16. halcon基本操作
  17. 迷你旅游网——旅游线路用名称查询以及查看详情(完成查询条件不确定性的定义模板方式解决...)
  18. Kafka多个消费者监听消费同一个Topic主题
  19. 【Monkey测试】手机app测试性能测试,Monkey测试详解(全)
  20. “炁”、“气”、“氣”

热门文章

  1. 398. 随机数索引 ( 设计 )
  2. 以英文为主记忆SAT词汇介绍
  3. 链接脚本之bss段的清空
  4. Java函数式编程入门之Function<T,R>接口
  5. TensorFlow学习——tf.GPUOptions和tf.ConfigProto用法解析
  6. 【通信原理(含matlab程序)】实验二:FM的调制和解调
  7. three.js glb 多个_奔驰GLB:正在为它的傲娇买单
  8. 聚来宝的项目怎么样?网赚创业项目介绍
  9. Django学习记录3-2——Mysql数据库的使用
  10. 移动端h5页面的设计稿尺寸