handlebar的一些用法

概述与介绍

  • Handlebars 是 JavaScript 一个语义模板库,通过对view和data的分离来快速构建Web模板。它采用"Logic-less template"(无逻辑模版)的思路,在加载时被预编译,而不是到了客户端执行到代码时再去编译, 这样可以保证模板加载和运行的速度。
  • 简单的说就是:Handlebars是一个很好的前后端的分离的方案

使用

Handlebars的安装是比较简单和方便的;handlebars是一个纯JS库,因此你可以像使用其他JS脚本一样用script标签来包含handlebars.js

<script src="jquery.min.js"></script>
<script type="text/javascript" src=".js/handlebars.js"></script>  

基本

将对象数据渲染到页面上

  • js代码
//用jquery获取模板
var tpl   =  $("#tpl").html();
//预编译模板
var template = Handlebars.compile(tpl);
//模拟json数据
var context = { name: "XXX", content: "this is Handlebars"};
//匹配json内容
var aaa = template(context);
//输入模板
$("#wrap").html(aaa);
  • 模板结构
<script id="tpl" type="text/x-handlebars-template">
<div class="demo">  <h1>{{name}}</h1><p>{{content}}</p>
</div>
</script>  

Handlebar的表达式

block

有时候当你需要对某条表达式进行更深入的操作时,Blocks就派上用场了,在Handlebars中,你可以在表达式后面跟随一个#号来表示Blocks,然后通过{{/表达式}}来结束Blocks。 如果当前的表达式是一个数组,则Handlebars会“自动展开数组”,并将Blocks的上下文设为数组中的元素。

<ul>
{{#arr_data}}<li>{{language}}</li>
{{/arr_data}}
</ul>  

以下为json数据

{arr_data: [{language: "hello"},{language: "word"},{language: "handlebars"}]
}

上面的代码会自动匹配arr_data数据并展开数据

if/else AND unless

Handlebars的if判断只能判断true和false,没办法进行这种a===10的逻辑判断。

#模板
{{#if isTrue}} <p>isTrue</p> {/if}}
{{#if email}} <p>{{email}}</p> {{else}} <p>is not email</p> {{/if}}
{{#if num}} <p>{{num}}</p> {{/if}}
{{#if data1}} {{else}} <p>没有这个字段</p> {{/if}}#json数据
{isTrue: true,email: '',num: '0'
};#页面效果
isTrue
is not email
0
没有这个字段

说明:

  • Handlebars if在判断前会做类型转换,如''、undefined、null、0、[]等都会被识别为false。不过,上面的例子中的'0'是字符串,所以还是会显示的。
  • if可以判断是否含有某个字段,如果没有执行else的内容
  • unlesee和if正好相反,当是false的时候执行; 是true的时候执行else里面的内容

with

{{#with}}一般情况下,Handlebars模板会在编译的阶段的时候进行context传递和赋值。使用with的方法,我们可以将context转移到数据的一个section里面(如果你的数据包含section)。这个方法在操作复杂的template时候非常有用。【简单的说就是,with可以判断这几数据有没有; 个人感觉和if挺像的】

{{#with author}}有author就显示里面的内容,没有就不显示
{{/with}}

Handlebar的访问(PATH)

Handlebar支持路径访问,Handlebar还支持嵌套的路径,使得能够查找嵌套低于当前上下文的属性
可以通过.来访问属性也可以使用../,来访问父级属性。 例如:(使用.访问的例子)【经常搭配着with一起用的】

#模板
<h1>{{author.id}}</h1>#json
{title: "this is title",author: {id: 47,name: "XXX"},body: "this is body"
}

遍历each

遍历可以算是一个最常用的功能,对于很多数据的展示都是需要用到each的。Handlebar的遍历对于数组和对象都适用。

#模板
{{#each this}} <p>{{this.name}}:{{this.age}}</p>
{{else}}<p>no data</p>
{{/each}}#json
[{name: 'aaa', age: 23 },{name: 'bbb', age: 55 }
]

遍历的一些小技巧

  • @index或者@key都可以获得序号,但是序号都是从0开始的,如果需要从1开始需要写一个helper; @key还可获得对象的索引值
  • @first和@last可以判断是否是数组的第一个或者最后一个。

Html转义

有时候,后台传来的一篇文章是富文本内容,而我们想要将其转换为htnl输出怎么办呢?“{{}}”输出默认转义Html,几乎所有的模板引擎输出默认都是转义Html的,避免xss攻击。如果你想避免转义,请这样用“{{{}}}”

#模板
<div>{{richText}}</div>
<div>{{{richText}}}</div>#数据
var data = {richText: '<div>this is content</div>'
};

Helpers

  • 后台传来的数据往往是需要做处理的,如时间格式化、金额格式化、索引值的开始,甚至一些状态的操作; 那么这个时候就需要Helper了,这个是Handlebar中最主要的功能,因为它才使得Handlebar那么的好用。
#模板
<p>{{format time}}</p>#Helpers
Handlebars.registerHelper('format', function (date, options) {return new Date(date).toLocaleString();
});#数据
{"time":1450576000281}
  • 在Helper里也能做一些判断,然后在页面上使用else判断;
    通过return options.fn(this)返回true的结果,
    通过return options.inverse(this)返回else要执行的内容
#模板
{{#equal data1 data2}}<p>两个数相等</p>
{{else}}<p>不相等</p>
{{/equal}}#js
Handlebars.registerHelper("equal",function(v1,v2,options){if(v1 == v2){//满足添加继续执行return options.fn(this);}else{//不满足条件执行{{else}}部分return options.inverse(this);}
});
  • 在Helper里Handlebars.SafeString就是不转义Html,如果想转义Html直接return内容即可。
#模板
<p>{{safe}}</p>#js
Handlebars.registerHelper('safe', function () {return new Handlebars.SafeString('<div>safe string</div>')
});

Handlebar的注释

Handlebars也可以使用注释写法如下

{{! 单行注释 }}
{{!-- 多行注释 --}}

Partials

共享同一个模板内容,有些公共部分希望一次书写,然后就能重复使用了;类似一些include的功能; 不需要也能调用Helper的方法

#模板
<p>{{> footer}}</p>#Helper
Handlebars.registerPartial('footer', function () {return new Handlebars.SafeString('<div>This is footer</div>')
});

其他

Handlebars官网的很多内置的helper以及功能可以参考看一下Handlebars官网,入门有时候还是容易的,但是深入学习需要的时间和经验。

参考

  • Handlebars官网
  • Handlebars中文文档(译自官方版)

转载于:https://www.cnblogs.com/yldf55/p/5147996.html

handlebar的一些用法——个人使用总结相关推荐

  1. handlebar的简单使用及方法

    handlebar是一款高效的模板引擎,他主要用于我们在重复使用和替换数据信息的时候能用一套模板的方式将他表示出来,一般我们前端需要前后端的交互,所以在这里我就介绍一下handlebar的使用方法. ...

  2. Handlebars模板引擎中的each用法(type=“text/x-handlebars-template“)

    ** handlebar ** 概述与介绍 Handlebars 是 JavaScript 一个语义模板库,通过对view和data的分离来快速构建Web模板.它采用"Logic-less ...

  3. c语言中external,static关键字用法

    static用法: 在C中,static主要定义全局静态变量.定义局部静态变量.定义静态函数. 1.定义全局静态变量:在全局变量前面加上关键字static,该全局变量变成了全局静态变量.全局静态变量有 ...

  4. Pandas_transform的用法

    先来看一个实例问题. 如下销售数据中展现了三笔订单,每笔订单买了多种商品,求每种商品销售额占该笔订单总金额的比例.例如第一条数据的最终结果为:235.83 / (235.83+232.32+107.9 ...

  5. Python中yield和yield from的用法

    yield 后面接的是 future 对象 调用方 委托生成器 yield from 直接给出循环后的结果 yield from 委托者和子生成器直接通信 yield from 直接处理stopIte ...

  6. pytorch学习 中 torch.squeeze() 和torch.unsqueeze()的用法

    squeeze的用法主要就是对数据的维度进行压缩或者解压. 先看torch.squeeze() 这个函数主要对数据的维度进行压缩,去掉维数为1的的维度,比如是一行或者一列这种,一个一行三列(1,3)的 ...

  7. python yield 和 yield from用法总结

    #例1. 简单输出斐波那契數列前 N 个数 #缺点:该函数可复用性较差,因为 fab 函数返回 None,其他函数无法获得该函数生成的数列 #要提高 fab 函数的可复用性,最好不要直接打印出数列,而 ...

  8. tf.nn.embedding_lookup()的用法

    函数: tf.nn.embedding_lookup( params, ids, partition_strategy='mod', name=None, validate_indices=True, ...

  9. OpenMP用法大全

    OpenMP基本概念 OpenMP是一种用于共享内存并行系统的多线程程序设计方案,支持的编程语言包括C.C++和Fortran.OpenMP提供了对并行算法的高层抽象描述,特别适合在多核CPU机器上的 ...

最新文章

  1. Python rstrip()方法 删除 string 字符串末尾的指定字符(默认为空格).
  2. php 合并数组 +和array_merge的区别
  3. hdu3746 KMP的next数组应用,求项链首尾项链循环
  4. Cookie或将被替换!Chrome工程师提议新型HTTP状态管理协议
  5. 一步一步学Silverlight 2系列(22):在Silverlight中如何用JavaScript调用.NET代码
  6. 用python编写最简单的记事本_Python使用字典实现的简单记事本功能示例
  7. 挖掘建模-分类与预测-回归分析-逻辑回归
  8. 希望直接访问系统内某个链接,跳过登录验证等过程
  9. oracle 对象的审计,初识!聊聊ORACLE的审计功能
  10. php时间测试,PHP 测试程序运行时间
  11. Android 存储
  12. c++/cli 之数据库操作
  13. 纪念自己初中的住宿生活
  14. 思科交换机配置链路聚合
  15. python 视频剪辑_视频剪辑什么鬼?Python 带你高效创作短视频
  16. 繁体转简体 java_【Java】简体中文、繁体中文转换
  17. 用html制作四种九九乘法表,JavaScript制作九九乘法表
  18. Nginx反向代理(解决纯前端项目部署到服务器上无法访问接口数据)
  19. 【表白合集】表白文案+小程序准备好了,请问对象哪里领?(内含多份源码)拿去。
  20. 水平+垂直 居中的方法

热门文章

  1. QThread之terminate()
  2. zabbix修改默认字体
  3. AreEngine IGeometry转WKT,WKB
  4. 回顾8年云栖大会: 见证中国互联网斗转星移
  5. 隆云通水质溶解氧传感器
  6. Spring学习(六):WebFlux
  7. css换行后缩进,css缩进技巧
  8. tox、subunit和testr
  9. 解析富有童趣的人工智能早教机器人
  10. Windows安装Ubuntu双系统(Win11+最新Ubuntu22.04.1LTS)