handlebars使用总结
对自己使用handlebars做一个小总结,以后忘记了,好有地方看一下,不会用的小伙伴也可以借鉴一下,写的不好。
使用
Handlebars的安装是比较简单和方便的;handlebars是一个纯JS库,因此你可以像使用其他JS脚本一样用script标签来包含handlebars.js
<script src="jquery.min.js"></script>
<script type="text/javascript" src=".js/handlebars.js"></script>
基本
html:
<-- 模板 -->
<script type="text/x-handlebars-template" id="tpl">
{{#each}}
...
{{/each}}
</script>
js:
//获取到模板
var tpl = $("#tpl").html();
//预编译模板
var template = Handlebars.compile(tpl);
//模拟数据(也可以是获取的json数据)
var context = {};
//匹配数据
var html = template(context);
//输入模板
$('body').html(html);
注 : 这是handlebars最常用的一中创建使用模式。
下面写一点handlebars的一些常用的方法,几乎是只要你用到handlebars就会用到的方法;我是100%用到了;
注:下面这些都是在模板中的使用的只有,目前只有helper是在js中定义在模板中使用。
概念和常用方法
1.block
我看每个介绍handlebars的都介绍了这个最基本最基本的东西,我也说不好,只能简单说一下了。
这个就是将模板分成块以#开头以/结束
{{#...}}{{/...}}
//例如 :
{{#each}}{{/each}}
{{#if}}{{else}}{{/if}}
2.表达式
这也是一个非常简单的一个概念,越简单的越难说,但是好理解希望你们能理解,原谅文化水平不高的我
我们想要展示数据就要用到表达式,在handlebars中的表达式就是两层大括号,括号里写上json数据中的键展现在页面上的就是对应的值 {{...}}
如果我们不想转化handlebars的数据,就是直接展示json的键我们就需要三层大括号 {{{}}}
3.判断 if and unless
handlebars中的判断很弱,弱到这能判断true和false(包括布尔值转化的例如 "",undefined,NaN。不支持 == != || && !)。handlebars提供了一个自定义helper可以自己加强if,这个后面会说到。
1.if判断(一般我使用这个)
模板:
{{#if true}}
<div>为true的时候显示<div>
{{else}}
<div>为false的时候显示<div>
{{/if}}
2.unless判断(与if是相反的)
模板:
{{#unless false}}
<div>为false的时候显示<div>
{{else}}
<div>为true的时候显示<div>
{{/unless}}
4.部分 {{#with}}{{/with}}
这种情况是返回的json数据有多个对象嵌套的问题,很好用的一个方法,
也可以直接通过对象点属性的方法找下去,既然handlebars提供了。我就说一下,用不用,看情况
json数据:
{
title : "标题1",
author: {
firstName:"王大",
lastName:"王二"
}
}
模板:
<div>
<h1>{{title}}</h1>
{{#with author}}
<p>{{firstName}}</p>
<p>{{lastName}}</p>
{{/with}}
</div>
5.遍历 {{#each}}{{/each}}
数据返回我们一个数组是很常见的问题,handlebars有专门处理数组的方法
json数据:
{name:["html","css","javaScript"]}
模板:
<ul>
{{#each name}}
<li>{{@index}} 索引<li>
<li>{{this}}</li>
{{/each}}
</ul>
注:this就是name数组中的每一个
6.注释
单行:
{{! 注释的内容 }}
多行:
{{!-- 注释的代码段--}}
7.自定义 helper
定义要在js文件中定义,使用要在模板中使用
handlebars使用Handlebars.registerHelper()方法来注册helper,
一般分为两类,一类是用来格式化数据,另一类是用来加强if
这个网址说的很详细:http://www.tuicool.com/articles/aiaqMn
时间格式化:
//时间戳处理
Handlebars.registerHelper('format', function (date,options) {
let str = new Date(date).toLocaleString();
let i = str.indexOf(' ');
let str1 = str.substr(i + 1,2);
let str2 = str.substr(i + 3,2); if (isNaN(str2)) {
if (str1 == '上午') {
str = str.replace(str.substr(i + 1,3),'0' + str.substr(i + 3,1));
}else {
str = str.replace(str.substr(i + 1,3),Number(str.substr(i + 3,1)) + 12);
}
}else{
if (str1 == '上午') {
str = str.replace(str.substr(i + 1,2),'');
}else {
if(Number(str2) == 12){
str = str.replace(str.substr(i + 1,4),'00');
}else {
str = str.replace(str.substr(i + 1,4),Number(str.substr(i + 3,2)) + 12);
}
}
}
return str;
});
if的简单加强:
//if 处理
Handlebars.registerHelper('ifCond', function(v1, v2, options) {
if(v1 == v2) {
return options.fn(this);
}
//options.inverse()这个方法就是取反的意思,相当于if的else
return options.inverse(this);
});
返回一个字符串:
Handlebars.registerHelper('valValType', function(){
//this.type 是返回的数据
var type = Handlebars.escapeExpression(this.type);
var html = `<div>1234</div>`; if(type){ var newHtml =`<div>12345</div>`;
}else {
var newHtml = html;
} return new Handlebars.SafeString(newHtml)
}) //用法在模板里 {{ valValType }}
handlebars使用总结的更多相关文章
- Handlebars 模板引擎之前后端用法
前言 不知不觉间,居然已经这么久没有写博客了,坚持还真是世界上最难的事情啊. 不过我最近也没闲着,辞工换工.恋爱失恋.深圳北京都经历了一番,这有起有落的生活实在是太刺激了,就如拿着两把菜刀剁洋葱一样, ...
- handlebars自定义helper的写法
handlebars相对来讲算一个轻量级.高性能的模板引擎,因其简单.直观.不污染HTML的特性,我个人特别喜欢.另一方面,handlebars作为一个logicless的模板,不支持特别复杂的表达式 ...
- handlebars.js的运用与整理
最近在做部门的技术分享网站,主要是一些文章的列表和演讲信息展示,内容比较规律,复用性较高.同事推荐了 handlebars.js.用来看看. handlebars.js是一种静态JS模板,用起来还蛮简 ...
- Express 4 handlebars 不使用layout写法
Express 4 handlebars 不使用layout写法 Express node nodejs handlebars layout 最近刚开始学习使用nodejs. 使用express搭建了 ...
- Handlebars.js的学习
写在开头的话: 在使用Ghost搭建自己的博客的时候,发现不会Handlebars.js寸步难行,所以本人决定学习下Handlebars.js,因此在此做个记录 为什么选择Handlebars.js ...
- js模版引擎handlebars.js实用教程——目录
写在开头的话: 阅读本文需要了解基本的Handlebars.js概念,本文并不是Handlebars.js基础教程,而是注重于实际应用,为读者阐述使用过程中可能会遇到的一些问题. 实际上,小菜写这篇文 ...
- Handlebars块级Helpers
1.Handlebars简单介绍: Handlebars是JavaScript一个语义模板库,通过对view和data的分离来快速构建Web模板.它采用"Logic-less templat ...
- js模版引擎handlebars.js实用教程——为什么选择Handlebars.js
返回目录 据小菜了解,对于java开发,涉及到页面展示时,比较主流的有两种解决方案: 1. struts2+vo+el表达式. 这种方式,重点不在于struts2,而是vo和el表达式,其基本思想是: ...
- handlebars.js 用 <br>替换掉 内容的换行符
handlebars.js 用 <br>替换掉 内容的换行符 JS: Handlebars.registerHelper('breaklines', function(text) { te ...
- 【前端】制作一个handlebars的jQuery插件
(function($) { var compiled = {}; $.fn.handlebars = function($srcNode, data) { // 取出模版内容 var src = $ ...
随机推荐
- 左偏树初步 bzoj2809 & bzoj4003
看着百度文库学习了一个. 总的来说,左偏树这个可并堆满足 堆的性质 和 左偏 性质. bzoj2809: [Apio2012]dispatching 把每个忍者先放到节点上,然后从下往上合并,假设到了 ...
- DWR3.0框架入门(1) —— 实现ajax
框架简介:DWR(Direct Web Remoting) 是一个用于改善web页面与Java类交互的远程服务器端Ajax开源框架,可以帮助开发人员开发包含AJAX技术的网站.它可以允许在浏 ...
- IOS中单例NSUserDefaults的使用(转)
一.了解NSUserDefaults以及它可以直接存储的类型 http://my.oschina.net/u/1245365/blog/294449 NSUserDefaults是一个单例,在整个程序 ...
- jQuery之事件移除
当事件执行完了,想取消事件的效果可以通过一定的办法来处理.比如bind()方法,可以通过unbind()方法来移除事件的效果. 比如下面的一个案例: <script type="tex ...
- 《剑指Offer》笔记(更新中)
这几天为了找工作开始看<剑指offer>,到现在也大概浏览一遍了,前两天看作者博客中提到九度OJ,就去看了一下,发现上面有书上的题目,就想可以自己写代码练习一下,而不仅仅是看解题思路,毕竟 ...
- 利用Selenium和Browsermob批量嗅探下载Bilibili网站视频
Rerence: http://www.liuhao.me/2016/09/20/selenium_browsermob_sniff_bilibili_video/ 日常生活中,用电脑看视频是非常频繁 ...
- React Native 之 HelloWorld
1. 切换目录 输入之前要切换到要保存的目录 2. 修改下载源 cd ~/ vim .npmrc 添加 registry = https://registry.npm.taobao.org 3. 在终 ...
- Python使用Selenium/PhantomJS
安装selenium: 1 pip install selenium 安装PhantomJS: 1 2 3 4 https://bitbucket.org/ariya/phantomjs/downlo ...
- App IM 之 环信
文档参考:http://docs.easemob.com/docs.php 开发社区:http://www.imgeek.org 也可以在官网页面上点击客服进行咨询 1. 环信 之 文件导航 2. 环 ...
- angularjs---服务(service / factory / provider)
初angularJs时 常写一些不够优雅的代码 !我总结了一下看看各位有没有中枪的!-----( 这里只针对服务service及其相关! ) 以下做法不太优雅 兄弟controller 之间的相同 ...