Handlebars 新手使用
昨天抽空看了一下关于Handlebars的 基础使用, 从开始写asp.net 用视图引擎,到写web 的时候 ,都是 用AJAx 来接受并分析数据,然后用 拼接的方式,或者追加的方式来实现在 页面中的 数据展示,今天 用 Handlebars 来实现同样的事情。(关于这些,还是不太清楚,有空还是需要多看看 关于前端的知识。。)
引用头文件
先说基础的使用 跟用JS插件一样,都是要用到引用文件:
<script src="Scripts/jquery-1.10.2.min.js"></script>
<script src="Scripts/handlebars.min.js"></script>
当然 Handlebars 的使用还是 基于jQ的语法来使用的。 也很 明了 只需要引用两个 文件。
使用起来 也是很容易理解 我自己的理解 Handlebars 是分为了两个 一个是 模板块,一个就是 js 方法+数据源块。
模板块
现实 个 这个 模板块一个 ID 用来以后JQ 拿到咱们所写得模板。 看代码:
<script id="table-template" type="text/x-handlebars-template">
{{#each student}}
<tr>
<td>{{@index}}</td>
<td>{{name}}</td>
<td>{{sex}}</td>
<td>{{age}}</td>
<td>{{{homePage}}}</td>
</tr>
{{/each}} </script>
先说 {{}} 就是模板 格式 相当于 html里面的<> 一样 同样 有{{/}} , 然后就是 #each 循环的意思 ,Razor视图引擎的话 那就完全没有难度了
其实就跟那个差不多{{}}中写的代码,其余部分 用来写
标签 #each student 循环 获取其中的 key的值放在<tr>中
在td中 包含的就是 JSON数据的 KEY ,{{@index}}这个是 Handlebars js中的一个变量 用来显示 序号
这时候 我就有个疑问当 是JSON 的是话最外层 是没有Key 的 那如何用来指这个JSON串,根据经验 this 用于这种情况, this就指当前
填充模板块
填充模板 , 很简单易懂 就是根据id拿到对应的 模板块,然后 获取指定的父节点 填充html
<script type="text/javascript">
$().ready(function () {
var data = {
"student": [
{
"name": "张三",
"sex": "0",
"age": 18,
"homePage": "<a href='javascript:void(0);'>张三的个人主页</a>"
},
{
"name": "李四",
"sex": "0",
"age": 20,
"homePage": "<a href='javascript:void(0);'>李四的个人主页</a>"
},
{
"name": "王五",
"sex": "1",
"age": 30,
"homePage": "<a href='javascript:void(0);'>王五的个人主页</a>"
}
]};
//获取 对应的模板块
var myTemplate = Handlebars.compile($("#table-template").html()); //在父节点填充 模板块并 给模板块赋值
$("#tableList").html(myTemplate(data));
});
</script>
上面这段代码 除了 模拟的data 数据之外 就剩下两句话 ,在其中 注释解释过, 然后 运行 就可以看到 自动填充的数据。
填充模板块内容很少 ,需要处理的还是 模板块的内容,根据 数据的结构来 用#each 循环获取其中的 值。
当然模板块 不是只有#each ,还有 if 语句 ,不过 本人并不推荐使用,因为很难用, 可以用 另外一个东西代替:
Handlebars.registerHelper("compare", function (name, options) {
if (name == "李四") {
return options.fn(this
);//就代表 执行结果为True
}
return options.inverse(this);//代表执行结果为False
});
可以在 JQ 中 用 他的Helper 方法, 来声明 一个 函数, 用来实现 判断,
可以看出有两个参数 第一个参数是需要 传入值,第二个参数 代表 该方法为块方法 就是{{#compare 参数1}}{{/compare}} 或许会有些不清晰看:
{{#each student}}
{{#compare name}}
<tr>
<td>{{@index}}</td>
<td>{{name}}</td>
<td>{{sex}}</td>
<td>{{age}}</td>
<td>{{{homePage}}}</td>
</tr>
{{else}}
<tr> 查无此人 </tr>
{{/compare}}
{{/each}}
上面就是 compare 套到模板中的方式。
第二个参数 代表 该方法为块方法 就是{{#compare 参数1}}{{/compare}} ,
如果去掉Options 这个参数就是 一个行内方法, {{方法名 name}} 直接返回需要的值,就能填充到该位置
以上就是 我对 Handlebars 的 基础使用 做的总结,如果有疑问,使用方法不明确 欢迎讨论哦!
参考网站:http://www.cnblogs.com/iyangyuan/p/3471227.html 很清晰的说明了使用方法 ,对应相对的使用情景
Handlebars 新手使用的更多相关文章
- js模版引擎handlebars.js实用教程——目录
写在开头的话: 阅读本文需要了解基本的Handlebars.js概念,本文并不是Handlebars.js基础教程,而是注重于实际应用,为读者阐述使用过程中可能会遇到的一些问题. 实际上,小菜写这篇文 ...
- js模版引擎handlebars.js实用教程
js模版引擎handlebars.js实用教程 阅读本文需要了解基本的Handlebars.js概念,本文并不是Handlebars.js基础教程,而是注重于实际应用,为读者阐述使用过程中可能会遇到的 ...
- gulp的使用以及Gulp新手入门教程
Gulp新手入门教程 原文 http://w3ctrain.com/2015/12/22/gulp-for-beginners/ Gulp 是一个自动化工具,前端开发者可以使用它来处理常见任务: 搭 ...
- Gulp新手入门教程
Gulp 是一个自动化工具,前端开发者可以使用它来处理常见任务: 搭建web服务器 文件保存时自动重载浏览器 使用预处理器如Sass.LESS 优化资源,比如压缩CSS.JavaScript.压缩图片 ...
- 新手学习web遇到的一些乱码问题
在新手学习web网站学习的时候经常会遇到?????这种乱码,对于刚起步的菜鸟来说真的很头痛,很容易打击继续学的信心当然了对于菜鸟的我最近也遇到过乱码问题,沉浸其中不能自拔,爱的深啊!!!!!我所遇到的 ...
- Handlebars 模板引擎之前后端用法
前言 不知不觉间,居然已经这么久没有写博客了,坚持还真是世界上最难的事情啊. 不过我最近也没闲着,辞工换工.恋爱失恋.深圳北京都经历了一番,这有起有落的生活实在是太刺激了,就如拿着两把菜刀剁洋葱一样, ...
- Vim新手入门资料和一些Vim实用小技巧
一些网络上质量较高的Vim资料 从我07年接触Vim以来,已经过去了8个年头,期间看过很多的Vim文章,我自己觉得非常不错,而且创作时间也比较近的文章有如下这些. Vim入门 目前为阿里巴巴高级技术专 ...
- 新手如何在gdb中存活
网络上已经有很多gdb调试的文章了,为什么我还要写这篇文章呢,因为本文是写给gdb新手的,目的就是通过一个简单的例子来让新手很快上手.一旦上手入门了,其他的问题就可以自己去搜索搞定了.右边是gdb的L ...
- handlebars自定义helper的写法
handlebars相对来讲算一个轻量级.高性能的模板引擎,因其简单.直观.不污染HTML的特性,我个人特别喜欢.另一方面,handlebars作为一个logicless的模板,不支持特别复杂的表达式 ...
随机推荐
- PEP8
1.规则要求 https://www.python.org/dev/peps/pep-0008 2.工具 https://github.com/jcrocholl/pep8 3.基本使用方法 测试自己 ...
- netty 入门二 (传输bytebuf 或者pojo)
基于流的数据传输:在基于流的传输(如TCP / IP)中,接收的数据被存储到套接字接收缓冲器中. 不幸的是,基于流的传输的缓冲区不是数据包的队列,而是字节队列. 这意味着,即使您将两个消息作为两个独立 ...
- iOS 远程推送消息解析及逻辑处理
关于远程推送的相关配置网上已经有足够多的教程,这里就不复述了.这里讲述当客户端收到推送消息后,应怎样对其进行相应的逻辑处理. 工程的AppDelegate.m文件里提供了如下方法: //当应用程序启动 ...
- 打字机效果-so easy
html <p> <span>有了梦想,我们的心有了飞翔:有了飞翔,我们的梦想不再遥远......</span> </p> js $(function( ...
- JavaScript的简单继承实现案例
<html><body><script> //实现JavaScript继承的步骤: //1:写父类 //2:写子类 //3:用Object.create()来实现继 ...
- 基于MySQL + Node.js + Leaflet的离线地图展示,支持百度、谷歌、高德、腾讯地图
1. 基本说明 本项目实现了离线展示百度.谷歌.高德.腾讯地图.主要功能如下: 实现了地图瓦片图下载.存储.目前支持存储至MySQL Node.js服务调用MySQL中的瓦片图 Leaflet展示地图 ...
- 蓝桥杯 剪邮票 全排列+DFS
剪邮票 如[图1.jpg], 有12张连在一起的12生肖的邮票. 现在你要从中剪下5张来,要求必须是连着的. (仅仅连接一个角不算相连) 比如,[图2.jpg],[图3.jpg]中,粉红色所示部分就是 ...
- mysqldump指定编码导出数据
mysqldump指定编码导出数据 第一步,导出旧库 mysqldump --default-character-set=latin1 -uroot -pXXX --database db > ...
- suds库使用说明官方文档
OVERVIEW The Suds web services client is a lightweight soap-based client for python the is licensed ...
- Java Random介绍
一.简介 Random类位于java.util包下,此类的实例用于生成伪随机数流.之所以称之为伪随机,是因为真正意义上的随机数(或者称为随机事件)在某次产生过程中是按照实验过程表现的分布概率随机产生的 ...