安装

Hbs的安装有两种方法:

1.在已有项目中使用npm安装hbs包

npm install hbs --save

这个方法只是从npm的库中把hbs包安装到了项目中,要在项目中真正使用还需要进行配置,接下来会说到

2.使用exprss-generator创建一个使用hbs的项目

这个情况是,你没有项目,而是使用express-generator这个npm包来创建一个express的项目,模板引擎选择hbs。

npm install express-generator -g

express --hbs 项目名称

这样就创建好了一个express项目,模板使用的是hbs,在app.js中已经做好了配置,不需要我们再进行额外的配置就能直接写hbs模板文件了。

配置

这里说的配置是指对express项目进行配置,使其能够支持hbs,针对安装中第一种情况说的。

在app.js中找到app.set('view engine','xxx');代码,改成如下:

app.set('view engine','hbs');

只需要这么一句就能让express项目使用hbs作为默认的模板引擎了。

修改默认后缀名

如 果你看hbs这个后缀名不爽,可以修改的。修改方法很简单,app.set('view engine','cool');这样就能把默认后缀名修改成cool了。但是此时还不行,express根本不知道cool是什么,还需要建立cool 跟hbs模板引擎之间的关联关系。

app.engine('cool',require('hbs').__express);

好了,这样我们就把默认后缀从hbs改成了cool。

express选择模板引擎的策略

1.如果没有后缀名,取系统设置的默认后缀名,并且根据该后缀名获取相应的模板引擎。

2.如果有后缀名,直接使用后缀名去取相应的模板引擎。

express很容让多种模板引擎共存,都不需要额外的配置。

为模板提供自定义的helper

hbs 是业务逻辑无关的模板引擎(logic-less template)。所以不建议在模板文件中写太复杂的代码。不过对于简单的功能在不同模板文件中多次出现,我们可以使用hbs提供的 registerHelper把代码注册成helper,那么就可以在模板文件直接调用了,提高代码重用。注册helper的方法如下:

hbs.registerHelper('sayHello',function(){

......

});

上面代码注册了一个名字为sayHello的方法,在写模板文件时就能直接调用。该方法是可以定义参数的。调用的方法我们会在下面说到。

使用partial精简模板

我们经常会遇见,多一个页面的头和尾部的代码都是相同,为一个不同的是中间的内容部分。这样我们就可以使用registerPartial定义partial。在需要使用的模板文件中直接引用该partial模板文件就可以了。跟helper一样都是代码重用的作用。

hbs.registerPartial(name,partial);

例如:

hbs.registerPartial('header','<head><title>{{title}}</title></head>');

调用方法下面会说到。

语法

接下里说一说模板文件编写的语法。在此之前先说一下context概念。express使用模板引擎的方式是res.render('模板文件名称',{});第二个参数是传给模板的数据,称做上下文(context)。

注释

{{!--注释文本 --}}

{{! 注释文本}}

这两种都是注释,区别在于,前者会保留下来,后者只是在模板文件中的注释,编译成html后就没有了。

简单表达式

{{name}}或{{{name}}}

从上下文中取出name属性显示出来。前者会对内容进行转义,而后者不会。比如name为<p>John</p>,前者输出的是&lt;p&gt;John&lt;/p&gt; 后者会原样输出。

块表达式

{{#if condition}}

......

{{/if}}

开始标记是#关键字,结束是/关键字

调用helper

{{sayHello}}

sayHello是我们定义的helper,如果sayHello需要参数,只需要在调用的时候加上传入的参数,如:

{{sayHello param1 param2}}

使用partial

{{> mypartial}}

内置流程控制块

if

{{#if 条件}}

......

{{/if}}

{{#if 条件}}

....

{{else}}

...

{{/if}}

with

它的功能是减少引用对象的深度,我们这里假设上下文是

{

name:"少年PI的奇幻漂流",

author:{

name:"外国人",

motherland:{

name:"外国",

position:"大西洋"

}

}

}

我们在些模板时,对于祖国这一块数据的展示,如下:

祖国:{{author.motherland.name}}

位置:{{author.motherland.position}}

是不是有很多重复的前缀,这时候就可以使用with了

{{#with author.motherland}}

祖国:name

位置:position

{{/with}}

如果层次更深,属性更多的话,好处就很明显了,以上例子中只有两个属性。

each

这是实现循环的.

{{#each arr}}

.....

{{/each}}

arr是一个集合。

自定义块

以上介绍的是handlebars内置的,我们可以自己定义满足自己需要的块。定义的方法很简单,就是使用registerHelper。

hbs.registerHelper('myblock',function(options){

return options.fn(this);

});

可以在模板中这样调用:

{{#myblock}}

<p>这是我的myblock</p>{{title}}

{{/myblock}}

假设调用块的这个模板文件的上下文中有title属性,它的值是cool!,那么上面调用产生的结果就是:

<p>这是我的myblock</p>cool!

块定义中options.fn是调用处块中间的模板代码片段编译后产生的模板方法,它是一个方法。

资源

http://handlebarsjs.com/
https://github.com/wycats/handlebars.js/
https://www.npmjs.com/package/hbs

https://github.com/donpark/hbs

handlebars学习总结相关推荐

  1. 学习Handlebars,从这里开始

    一.Handlebars 是什么? Handlebars 是一个页面模板化工具. 1.使用场景 当网站中很多页面的排版格式是相同的,只是其中内容不同,此工具就是比较好的解决方案.更多使用建议,看这里! ...

  2. Handlebars.java学习笔记

    背景 最近在做一个移动收银的项目,需要使用到银行的设备进行收银.由于使用的是银行设备,每次更新APP是都需要经过银行审核才能上线,这就加大了应用上线的复杂度.而且银行的pos机,性能也有限,通过htt ...

  3. Java入门学习注意事项有哪些?

    想要学好java技术,做好学习规划路线和注意事项是非常重要的,尤其是零基础学员,Java涉及到的知识点非常多,我们需要制定合理的Java学习路线图,这样会事半功倍,下面小编和大家总结一下Java入门学 ...

  4. Ember.js 入门指南——handlebars属性绑定

    2019独角兽企业重金招聘Python工程师标准>>> 本文从http://www.ibeginer.sinaapp.com迁移过来,欢迎访问原页面. 简单讲属性绑定其实就是在HTM ...

  5. Node.js + Express + handlebars搭建个人网站(1)

    作为前端,需要学习的东西越来越多了,各种新框架,层出不穷.再加上Node.js的流行,需要学习的就更多了.很早就开始想学习Node,总是学了一半,又放下了,没有真正地掌握过.其中原因也是因为没有一个项 ...

  6. java开发程序员_Java大牛给入门Java开发程序员的10个学习建议

    Java的知识点其实非常多,并且有些知识点比较难以理解,有时候我们自以为理解了某些内容,其实可能只是停留在表面上,没有理解其底层实现原理. 纸上得来终觉浅,绝知此事要躬行. 学习Java基础的时候,应 ...

  7. nodeJS — 学习的笔记

    Node介绍 为什么要学习Node.js 企业需求 具有服务端开发经验更改 front-end back-end 全栈开发工程师 基本的网站开发能力 服务端 前端 运维部署 多人社区 [外链图片转存失 ...

  8. js模版引擎handlebars.js实用教程——结束语

    返回目录 有了这些功能,[ajax json Handlebars]替代[vo el表达式]不成问题,新时代的曙光已经来临,最佳解决方案在此,您还等什么? 教程到此结束...祝读者学习愉快... 转载 ...

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

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

最新文章

  1. k-d tree算法的研究
  2. MySQL- SHOW TABLE STATUS命令
  3. 立体匹配之NCC算法
  4. 贵州轻工职业技术学院计算机分数,贵州轻工职业技术学院历年分数线 2021贵州轻工职业技术学院录取分数线...
  5. 为了让盲人也能追剧,优酷做了哪些努力?
  6. JDK源码解析之 java.lang.ClassLoader
  7. python 回归去掉共线性_线性回归中的多重共线性与岭回归
  8. Android 解决手机unauthorized错误
  9. git解决 remote: Permission to wuheng1991/site-manager.git denied to XXX
  10. 做好的ppt太大怎么变小
  11. 基于单片机的脉搏心率远程监测
  12. 全球最强大脑在哪里?阿里小蜜算法团队在寻找
  13. 如何用photoshop做24色环_Photoshop绘制超逼真的色轮/色环配色表效果图
  14. 高校房产管理系统有哪些模块?
  15. obj-c中Autorelease、属相定义Property、对象的操作
  16. 计算机专业项目化教学,中职计算机专业实训课项目化教学实践探索
  17. 教你成功在Win10系统中运行docker
  18. 畅想未来计算机的绘画作品小学生,畅想未来儿童画绘画作品
  19. 网络模拟和分析工具--Mahimahi的安装教程
  20. Audio的播放流程

热门文章

  1. openwrt 处理间歇性无法上网(DNS故障)问题
  2. TBB简介和一个简单的示例
  3. 人月神话 中文版 pdf
  4. 百度地图经纬度和像素坐标互转
  5. lcd1602液晶显示器
  6. 串口调试助手 Alien V0.238
  7. 问题-fuxi job failed ,cased by:Invalid decimal format.
  8. 普里姆(Prim)算法 Java实现(最小生成树)
  9. PostgreSQL 14 pageinspect新增gist索引支持
  10. linux IRQ Management(五)- irq_desc