昨天抽空看了一下关于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 新手使用的更多相关文章

  1. js模版引擎handlebars.js实用教程——目录

    写在开头的话: 阅读本文需要了解基本的Handlebars.js概念,本文并不是Handlebars.js基础教程,而是注重于实际应用,为读者阐述使用过程中可能会遇到的一些问题. 实际上,小菜写这篇文 ...

  2. js模版引擎handlebars.js实用教程

    js模版引擎handlebars.js实用教程 阅读本文需要了解基本的Handlebars.js概念,本文并不是Handlebars.js基础教程,而是注重于实际应用,为读者阐述使用过程中可能会遇到的 ...

  3. gulp的使用以及Gulp新手入门教程

    Gulp新手入门教程 原文  http://w3ctrain.com/2015/12/22/gulp-for-beginners/ Gulp 是一个自动化工具,前端开发者可以使用它来处理常见任务: 搭 ...

  4. Gulp新手入门教程

    Gulp 是一个自动化工具,前端开发者可以使用它来处理常见任务: 搭建web服务器 文件保存时自动重载浏览器 使用预处理器如Sass.LESS 优化资源,比如压缩CSS.JavaScript.压缩图片 ...

  5. 新手学习web遇到的一些乱码问题

    在新手学习web网站学习的时候经常会遇到?????这种乱码,对于刚起步的菜鸟来说真的很头痛,很容易打击继续学的信心当然了对于菜鸟的我最近也遇到过乱码问题,沉浸其中不能自拔,爱的深啊!!!!!我所遇到的 ...

  6. Handlebars 模板引擎之前后端用法

    前言 不知不觉间,居然已经这么久没有写博客了,坚持还真是世界上最难的事情啊. 不过我最近也没闲着,辞工换工.恋爱失恋.深圳北京都经历了一番,这有起有落的生活实在是太刺激了,就如拿着两把菜刀剁洋葱一样, ...

  7. Vim新手入门资料和一些Vim实用小技巧

    一些网络上质量较高的Vim资料 从我07年接触Vim以来,已经过去了8个年头,期间看过很多的Vim文章,我自己觉得非常不错,而且创作时间也比较近的文章有如下这些. Vim入门 目前为阿里巴巴高级技术专 ...

  8. 新手如何在gdb中存活

    网络上已经有很多gdb调试的文章了,为什么我还要写这篇文章呢,因为本文是写给gdb新手的,目的就是通过一个简单的例子来让新手很快上手.一旦上手入门了,其他的问题就可以自己去搜索搞定了.右边是gdb的L ...

  9. handlebars自定义helper的写法

    handlebars相对来讲算一个轻量级.高性能的模板引擎,因其简单.直观.不污染HTML的特性,我个人特别喜欢.另一方面,handlebars作为一个logicless的模板,不支持特别复杂的表达式 ...

随机推荐

  1. 使用duilib开发简单的Window安装包

    一.具体思路 安装过程:安装包的制作包括资源文件的打包,资源文件打包到安装包exe中,安装的时候需要从exe中提取出对应的资源文件, 然后解压文件安装到指定目录,然后就是对安装的可执行程序进行注册表的 ...

  2. fragmentTabHost 使用示例

    目前我们看微信的底部,有四个导航栏,那我们应该来怎么实现类似的导航栏呢? 在 android 4.0 的时候,推出了一个新的工具,fragmentTabHost . fragmentTabHost  ...

  3. 实验:ignite查询效率探究

    前面的文章讲到ignite支持扫描查询和sql查询,其sql查询是ignite产品的一个亮点,那么哪一种的查询更适合我们的产品使用呢,往下看: 先分别贴一下扫描查询和sql查询两种查询方式的代码,供参 ...

  4. 【魅族Pro7】——BootStrap/JQuery/Canvas/PHP/MySQL/Ajax爬坑之项目总结(一)

    前言:这个项目是我们小组团体合作完成的学习项目,项目使用魅族GUI设计和图片素材,响应式重构Pro7官网的首页.子页.商城及购物车,并加入一些创新.我主要负责的是[画屏子页]的项目,这里作为温故知新, ...

  5. selenium基本操作

    #coding=utf-8from selenium import webdriverfrom selenium.webdriver.common.keys import Keysfrom selen ...

  6. xampp 出现403 无法访问问题(已解决)

    最近重新安装xampp,配置虚拟主机做本地测试,但是总是出现服务器无法访问,权限不够的提示. 查找error文件后排查错误,发现是权限的问题.具体错误如下: 重新查看配置文件httpd.conf,才发 ...

  7. Bootstrap 开关(switch)使用整理

    1.在JS里根据指定的 1或者0 或者其它值让按钮变成 on 或者 off (通常需要根据数据库查询的结果初始化开关的状态) (--开关插件包 bootstrap-switch.min.js) < ...

  8. cinder块存储 后端采用lvm、nfs安装配置

    #cinder块存储 后端采用lvm.nfs安装配置 openstack pike 安装 目录汇总 http://www.cnblogs.com/elvi/p/7613861.html #cinder ...

  9. 实现快餐配送页面jq

    <!DOCTYPE html><html> <head> <meta charset="utf-8"> <title>快 ...

  10. 再学习之Spring(面向切面编程)

    一.概念 1.理论 把横切关注点和业务逻辑相分离是面向切面编程所要解决的问题.如果要重用通用功能的话,最常见的面向对象技术是继承(inheritance)或 组成(delegation).但是,如果在 ...