[前端神器]handlebars+requirejs基本使用方法
最近在某网站看到了handlebars.js,出于好奇就百度了下这是神马玩意,结果让我很是欢喜,于是就开始自学下,handlebars就几个方法,蛮简单,言归正传!
以下是基本教学逻辑演示,会附完整代码
测试案例就分为3大块,头、主体、尾:
<div id="header"></div>
<div class="contact" id="contact"></div>
<div id="footer"></div>
先来讲讲id="contact"主体有些什么内容,html代码就不贴了,直接看下图:

handlebars的模版代码如下:
<script id="contact-template" type="text/x-handlebars-template">
<div class="tit">{{transformat info}}</div>
{{#tit}}
<span class="one">{{this}}</span> {{/tit}} {{#student}}
<span class="one">{{@index}}</span><span class="one">{{name}}</span><span class="one">{{sex}}</span><span class="one">{{age}}</span><span class="one">{{sheight}}</span> {{/student}}
</script>
图片中的‘2016通讯录’用到了handlebars.registerHelper,代码如下:
Handlebars.registerHelper("transformat", function(value) {
if(value == "通讯录") {
return new Handlebars.SafeString("<font color='pink'>2016通讯录</font>")
} else {
return "old通讯录";
}
});
注册一个helper,value是模版传进来的值,相当于jq的function(),new Handlebars.SafeString是为了防止把html标签输出为文本形式,就是jq下html()和text()的区别。
最后通过渲染将模版输出到网页,代码如下:
$('#contact').html(Handlebars.compile($("#contact-template").html())(data));
如果有通用模版,就是一个模版要调用多次,上面的代码也可以这样写,方便调用:
var contact=Handlebars.compile($("#contact-template").html());
$('#contact').html(contact(data));
其中的data就是json数据,为了方便就自定义了:
var data = {
"info": "通讯录",
"tit": ["序号", "姓名", "性别", "年龄", "身高"],
"student": [{
"name": "张三",
"sex": "男",
"age": 18,
"sheight": "175"
}, {
"name": "李四",
"sex": "男",
"age": 22,
"sheight": "180"
}, {
"name": "妞妞",
"sex": "女",
"age": 18,
"sheight": "165"
}, {
"name": "袁帅",
"sex": "男",
"age": 17,
"sheight": "173"
}]
};
最后效果图如下,其实和刚刚那个主体一样,就是有头有尾而已:

到这里其实handlebars的基础知识就讲解完了,已经能满足日常网站的需求,当然handlebars还有其他的一些功能,可以参考中文手册:
http://keenwon.com/992.html
未完待续,然后文件的头和尾怎么能拆分出来放在单独的页面中来引用呢?不然不可能每个页面都写一遍,以后要改就麻烦了(当然如果你前端用的是php、asp之类的动态语言,那么一下部分可以忽略不看,因为我用的是html+ajax来调用api接口的)然后只能百度新的东西,最终找到了require text.js,又一神器出现,天将降大任于斯人也,那么简单再来说说,看招:
text.js是require.js下的一个插件,我代码里都有。
我把头和尾拆分为两个单独的html文件,如下:
header.html
<script id="header-template" type="text/x-handlebars-template">
<div class="header"><span>首页</span><span>联系我们</span><span>关于我们</span></div>
</script>
footer.html
<script id="footer-template" type="text/x-handlebars-template">
<div class='footer'>CopyRight© 2015-2016</div>
</script>
其实放在一个文件中也行,到时候自己体会。
两个文件拆分了,接下来就是引用的,那么require text.js就要出马了,先调用下。
<script type="text/javascript" src="js/require.js" data-main="js/main.js"></script>
data-main其实是定义了一个入口文件,这个就不细说了,参考官方文档:
http://www.bootcdn.cn/require-text/readme/
这个是英文的,大家可以自行百度其他文档。
main.js的代码是自己写的,写入口,其他的不多说了,就说和引用有关的,看代码:
define(["text!../header.html", "text!../footer.html"], function(header, footer) {
$('#header').html(header);
$('#header').html(Handlebars.compile($("#header-template").html()));
$('#footer').html(footer);
$('#footer').html(Handlebars.compile($("#footer-template").html()));
});
text!../header.html中的text!表示把header.html文件引用进来以文本的形式,反正就是类似于php的include、require,把header.html和footer.html引用到index.html中。
这样一来,Handlebars.compile渲染模版就要放在main.js的define回调中去。
这样就能在任何页面引用Handlebars模版文件了,说到这,大家应该会明白我刚说的头和尾能放一个文件中吧,调用模版也是根据模版的ID调用,如果模版不多,放一个公用html文件就好。
好了,废话就说到这了,放上大家心心念念的完整代码了!拜~
http://files.cnblogs.com/files/yuanxiaojian/handlebars_require.rar
今天过来更新下代码,关于requirejs的,模块化了js的管理和一些公用文件,改动较大,不明白可以参考官方文档,这里就不再介绍了,直接上代码了!2017-01-11
http://files.cnblogs.com/files/yuanxiaojian/handlebars_requirejs.rar
注意:要搭建本地环境后浏览,直接打开没内容,json之类的读取不到,这种最后用的时候肯定是服务器环境,小白不会搭建的话直接百度下载个phpstudy安装就好。
——若要转载请注明出处——
http://www.cnblogs.com/yuanxiaojian/p/6197781.html
[前端神器]handlebars+requirejs基本使用方法的更多相关文章
- [前端神器]handlebars+require基本使用方法
最近在某网站看到了handlebars.js,出于好奇就百度了下这是神马玩意,结果让我很是欢喜,于是就开始自学下,handlebars就几个方法,蛮简单,言归正传! 以下是基本教学逻辑演示,会附完整代 ...
- 前端优化:RequireJS Optimizer 的使用和配置方法
RequireJS Optimizer 是 RequireJS 自带的前端优化工具,可以对 RequireJS 项目中的 JavaScript & CSS 代码使用 UglifyJS 或者 C ...
- SpringMVC 前端获得定义JSON对象的方法
SpringMVC 前端获得定义JSON对象的方法: 可以使用map进行对象的创建,这样就会解析成键值对,不需要为前端专门定义对象.
- WebGIS中以version方式实现代码更新后前端自动读取更新代码的方法
文章版权由作者李晓晖和博客园共有,若转载请于明显处标明出处:http://www.cnblogs.com/naaoveGIS/ 1. 前言 GIS代码进行更新后,由于用户前端已有缓存,导致更新的功能不 ...
- 打造你的前端神器-webstorm11
说起前端编辑器,用过dw,sublime,hbuilder,webstorm也不陌生,之前的版本8有用过一下,但是觉得比sublime重量太多,但是随着后来用node的开始,发现需要打造个web前端神 ...
- 前端神器avalonJS入门(一)
转自:http://www.cnblogs.com/vajoy/p/4063824.html avalonJS是司徒正美开发和维护的前端mvvm框架,可以轻松实现数据的隔离和双向绑定,相比angula ...
- 前端神器avalonJS入门(二)
本章开始搭配requireJS来使用avalon,开始之前,我们可以对avalon进行精简改造(注:新版的avalon已提供了shim版本,无需再做如下的精简了,直接点这里获取). avalon源码里 ...
- 前端神器-神级代码编辑软件Sublime Text下载、使用教程、插件推荐说明、全套快捷键
Sublime Text 是一个代码编辑器,也是HTML和散文先进的文本编辑器.Sublime Text是由程序员Jon Skinner于2008年1月份所开发出来,它最初被设计为一个具有丰富扩展功能 ...
- 前端神器avalonJS入门(三)
本章将介绍如何使用avalon来实现前端路由功能. 我们需要用到两个avalon路由配套模块—— mmHistory.js 和 mmRouter.js .其中mmHistory是用于历史管理,它会劫持 ...
随机推荐
- Linux下安装python-2.7 先zlib
2018-04-25 发布 Linux下安装python-2.7 python 1.1k 次阅读 · 读完需要 25 分钟 1 安装依赖的库 yum -y install python-deve ...
- 装饰器--decorator1
装饰器 一.定义 1.装饰器:本质是函数 2.功能:用来装饰其他函数,为其他函数添加附加功能 二.原则 1.不能修改被装饰函数的源代码 2.不能修改被装饰函数的调用方式 三.实现装饰器 1.函数 即 ...
- zkw费用流 学习笔记
分析 记\(D_i\)为从\(S\)出发到\(i\)的最短路 最短路算法保证, 算法结束时 对于任意存在弧\((i,j)\)满足\(D_i + c_{ij}\ge D_j\) ① 且对于每个 \(j\ ...
- Python学习笔记(四十七)SMTP发送邮件
摘抄自:https://www.liaoxuefeng.com/wiki/0014316089557264a6b348958f449949df42a6d3a2e542c000/001432005226 ...
- 实用技巧:如何用 CSS 做到完全垂直居中
本文将教你一个很有用的技巧——如何使用 CSS 做到完全的垂直居中.我们都知道 margin:0 auto; 的样式能让元素水平居中,而 margin: auto; 却不能做到垂直居中……直到现在.但 ...
- 利用PhantomJS生成网站截图
var page = require('webpage').create(); page.open('http://qq.com', function () { page.render('exampl ...
- 【CODEVS】2800 送外卖
[算法]最短路(floyd)+状态压缩型动态规划 [题解] 经典的TSP问题(货郎担问题):求最小权哈密顿回路(遍历全图点一次且仅一次).本题稍作改动,先说原TSP问题解法:状压DP. 状态用二进制表 ...
- vue-router.esm.js?fe87:16 [vue-router] Route with name 'page' does not exist
本文地址:http://www.cnblogs.com/veinyin/p/7910525.html 我的路由配置 { path: '/page', name: page, component: pa ...
- 支付宝Android接口4.0以上报错Failure calling remote service
很坑爹的问题,4.0一下没问题,完全按照接口文件写的.网上一查,很多人遇到.最好直接在4.2下调试,看看报错问题,然后度娘. 将RSA文件中的加上“BC”后测试通过...NND PKCS8Encode ...
- UIDynamicBehavior的行为类翻译
CHENYILONG Blog UIDynamicBehavior的行为类翻译 © chenyilong. Powered by Postach.io Blog