最近在某网站看到了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+require基本使用方法的更多相关文章

  1. [前端神器]handlebars+requirejs基本使用方法

    最近在某网站看到了handlebars.js,出于好奇就百度了下这是神马玩意,结果让我很是欢喜,于是就开始自学下,handlebars就几个方法,蛮简单,言归正传! 以下是基本教学逻辑演示,会附完整代 ...

  2. handlebars+require

    handlebars+require 最近在某网站看到了handlebars.js,出于好奇就百度了下这是神马玩意,结果让我很是欢喜,于是就开始自学下,handlebars就几个方法,蛮简单,言归正传 ...

  3. SpringMVC 前端获得定义JSON对象的方法

    SpringMVC 前端获得定义JSON对象的方法: 可以使用map进行对象的创建,这样就会解析成键值对,不需要为前端专门定义对象.

  4. WebGIS中以version方式实现代码更新后前端自动读取更新代码的方法

    文章版权由作者李晓晖和博客园共有,若转载请于明显处标明出处:http://www.cnblogs.com/naaoveGIS/ 1. 前言 GIS代码进行更新后,由于用户前端已有缓存,导致更新的功能不 ...

  5. 打造你的前端神器-webstorm11

    说起前端编辑器,用过dw,sublime,hbuilder,webstorm也不陌生,之前的版本8有用过一下,但是觉得比sublime重量太多,但是随着后来用node的开始,发现需要打造个web前端神 ...

  6. 【前端】Require.js使用方法总结

    一.为什么要使用require.js 首先一个页面如果在加载多个js文件的时候,浏览器会停止网页渲染,加载文件越多,网页失去响应的时间就会越长:其次,由于js文件之间存在依赖关系,因此必须严格保证加载 ...

  7. 前端神器avalonJS入门(二)

    本章开始搭配requireJS来使用avalon,开始之前,我们可以对avalon进行精简改造(注:新版的avalon已提供了shim版本,无需再做如下的精简了,直接点这里获取). avalon源码里 ...

  8. 前端神器-神级代码编辑软件Sublime Text下载、使用教程、插件推荐说明、全套快捷键

    Sublime Text 是一个代码编辑器,也是HTML和散文先进的文本编辑器.Sublime Text是由程序员Jon Skinner于2008年1月份所开发出来,它最初被设计为一个具有丰富扩展功能 ...

  9. 前端下载图片的N种方法

    前几天一个简单的下载图片的需求折腾了我后端大佬好几天,最终还是需要前端来搞,开始说不行的笔者最后又行了,所以趁着这个机会来总结一下下载图片到底有多少种方法. 先起个服务 使用expressjs起个简单 ...

随机推荐

  1. Selenium-xpath详解

    1.XPATH是什么 XPATH是一门在XML文档中查找信息的语言,XPATH可用来在XML文档中对元素和属性进行遍历,主流的浏览器都支持XPATH,因为HTML页面在DOM中表示为XHTML文档.X ...

  2. c#DataGridView数据绑定示例——格式化单元格的内容(转)

    转自http://blog.csdn.net/testcs_dn/article/details/37834063 c#DataGridView数据绑定示例 格式化单元格的内容 在使用DataGrid ...

  3. C语言-自定义函数

    C语言自定义函数 --1-- 自定义函数定义 1.1 无参无返回值函数 1.2 无参有返回值函数 1.3 有参无返回值函数 1.4 有参有返回值函数 --2-- 函数的参数 2.1 形式参数介绍和使用 ...

  4. 数据持久化以及DAO模式的简单使用

    持久化:(是将程序中的数据在瞬时状态和持久状态间转换机制)        即把数据(如内存中的对象)保存到可永久保存的存储设备中(如磁盘).持久化的主要应用是将内存中的对象存储在关系型的数据库中,当然 ...

  5. zigbee学习之路(十二):zigbee协议原理介绍

    一.前言 从今天开始,我们要正式开始进行zigbee相关的通信实验了,我所使用的协议栈是ZStack 是TI ZStack-CC2530-2.3.0-1.4.0版本,大家也可以从TI的官网上直接下载T ...

  6. 向STM32 CUBE MX 生成的工程里移植stemwin

    我参考这个文章做的: http://bbs.armfly.com/read.php?tid=1678 这次添加的是没有os的版本 另外跟用不用hal库没关系 1. keil自带了emwin 2. 用c ...

  7. mysql主从配置(基于mysql5.5.x)

    安装mysql数据库主从复制,步骤如下:1.主从服务器分别作以下准备:    1.1.数据库版本完全一致    1.2.修改root的密码, 不改也可以 2.修改主服务器master #vi /etc ...

  8. hive1.2.1实战操作电影大数据!

    我采用的是网上的电影大数据,共有3个文件,movies.dat.user.dat.ratings.dat.分别有3000/6000和1百万数据,正好做实验. 下面先介绍数据结构: RATINGS FI ...

  9. 常用open api

    SNS类网站API Facebook - http://developers.facebook.com/ 人人网开放平台 - http://dev.renren.com/ 51.com开放平台 - h ...

  10. 3.UIViewController详解

     一. UIViewController,视图控制器,它是UIKit中非常重要的组成部分.它由控制器+View两部分组成. 控制器功能: ->实现代码逻辑,决定它自带的View的界面显示. -& ...