Handlebars学习笔记2

Handlebars是什么

Handlebars是javascript的一个语义编译模板,它可以兼容Mustache,引入的Mustache可以获得Handlebars的一些额外功能。

Handlebars语句


1 <div class="entry">
2 <h1>{{title}}</h1> //Handlebars的语句是从花括号开始{{内容}}
3 <div class="body">
4 {{body}}
5 </div>
6 </div>

Handlebars预编译

1.安装:可以在官网http://handlebarsjs.com/下载Handlebars,是个js文件,所以可以像引用js文件一样,把这个放在head标签内

2.预编译模块


 1 <script id="entry-template" type="text/x-handlebars-template">
2 /*template content 这里放置模板内容
3 <div class="entry">
4 <h1>{{title}}</h1>
5 <div class="body">
6 {{body}}
7 </div>
8 </div>
9 **/
10 </script>

3.编译模板


1 <script>
2 $(function(){
3 var source = $("#entry-template").html();
4 var template = Handlebars.compile(source); //编译模板
5 var context = {title: "My New Post", body: "This is my first post!"}; //模拟json数据
6 var html = template(context);
7 })
8 </script>

结果如下:


1 <div class="entry">
2 <h1>My New Post</h1>
3 <div class="body">
4 This is my first post!
5 </div>
6 </div>

HTML溢出(Escaping)


1  <div class="entry">
2 <h1>{{title}}</h1>
3 <div class="body">
4 {{{body}}} //json数据如下{title:"<p>hello</p>",body:"<p>world<p>"}
5 </div>
6 </div>

结果如下:

1.<p>hello<p>  //title的值

2.world //body的值

注意json数据含有html标签的话,使用{{value}},它将被escape并且不被解析,如果你希望生成html的话就使用{{{value}}}这种形式的。

Block expressions

使用Block expressions是从{{#helperName
options}}这种模式开始的,{{/helperName}}结束的

使用一个helper创建一个模


1 {{#list people}}{{firstName}} {{lastName}}{{/list}}  //json数据如下{
2 people: [
3 {firstName: "Yehuda", lastName: "Katz"},
4 {firstName: "Carl", lastName: "Lerche"},
5 {firstName: "Alan", lastName: "Johnson"}
6 ]
7 }

list helper代码如下


1 Handlebars.registerHelper(‘list‘, function(items, options) {
2 var out = "<ul>"; //list helper传进两个参数,第1个参数为person,第2个参数为options,包含fn属性
3 for(var i=0, l=items.length; i<l; i++) {
4 out = out + "<li>" + options.fn(items[i]) + "</li>";
5 }
6
7 return out + "</ul>";
8 });

结果:

<ul>
<li>Yehuda Katz</li>
<li>Carl Lerche</li>
<li>Alan Johnson</li>
</ul>

完整的demo如下:

 1 <!DOCTYPE html>
2 <html xmlns="http://www.w3.org/1999/xhtml">
3 <head>
4 <meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>
5 <title>HanderBarx学习笔记</title>
6 <script src="scripts/jquery.min.js"></script>
7 <script src="scripts/handlebars-v1.3.0.js"></script>
8 <script id="my-template" type="text/x-handlebars-template">
9 {{#list people}}{{firstname}}{{lastName}}{{/list}}
10 </script>
11 <script>
12 $(function () {
13 var source = $("#my-template").html();
14 var template = Handlebars.compile(source);
15 //list helper
16 Handlebars.registerHelper(‘list‘, function (item, options) { //people作为第一个参数,options作为第二个参数,包含一个fn属性
17 var out = "<ul>";
18 for (var i = 0; i < item.length; i++) {
19 out = out + "<li>" + options.fn(item[i]) + "</li>";
20 }
21 return out + "</ul>";
22 })
23 var context = { people: [{ firstName: "Yehuda", lastName: "Kate" }, {firstName:"Carl",lastName:"Lech"}]}
24 var html = template(context);
25 $("#result").html(html);
26 })
27 </script>
28 </head>
29 <body>
30 <div id="result"></div>
31 </body>
32 </html>

Handlebars学习笔记2,码迷,mamicode.com

时间: 2024-10-10 06:56:02

Handlebars学习笔记2的相关文章

Jade学习笔记

初学nodejs,折腾过用handlebars做模板,后来隔了一段重新学习,用了jade,真心简洁……记录一些学习笔记,以备复习. jade是基于缩进的,所以tab与space不能混用: 属性的设置:link(rel='stylesheet', href='/stylesheets/style.css'); 变量的定义:- var users = ["Sally","Joseph","Sam","Mike"]  不要var也可

vector 学习笔记

vector 使用练习: /**************************************** * File Name: vector.cpp * Author: sky0917 * Created Time: 2014年04月27日 11:07:33 ****************************************/ #include <iostream> #include <vector> using namespace std; int main

Caliburn.Micro学习笔记(一)----引导类和命名匹配规则

Caliburn.Micro学习笔记(一)----引导类和命名匹配规则 用了几天时间看了一下开源框架Caliburn.Micro 这是他源码的地址http://caliburnmicro.codeplex.com/ 文档也写的很详细,自己在看它的文档和代码时写了一些demo和笔记,还有它实现的原理记录一下 学习Caliburn.Micro要有MEF和MVVM的基础 先说一下他的命名规则和引导类 以后我会把Caliburn.Micro的 Actions IResult,IHandle ICondu

jQuery学习笔记(一):入门

jQuery学习笔记(一):入门 一.JQuery是什么 JQuery是什么?始终是萦绕在我心中的一个问题: 借鉴网上同学们的总结,可以从以下几个方面观察. 不使用JQuery时获取DOM文本的操作如下: 1 document.getElementById('info').value = 'Hello World!'; 使用JQuery时获取DOM文本操作如下: 1 $('#info').val('Hello World!'); 嗯,可以看出,使用JQuery的优势之一是可以使代码更加简练,使开

[原创]java WEB学习笔记93:Hibernate学习之路---Hibernate 缓存介绍,缓存级别,使用二级缓存的情况,二级缓存的架构集合缓存,二级缓存的并发策略,实现步骤,集合缓存,查询缓存,时间戳缓存

本博客的目的:①总结自己的学习过程,相当于学习笔记 ②将自己的经验分享给大家,相互学习,互相交流,不可商用 内容难免出现问题,欢迎指正,交流,探讨,可以留言,也可以通过以下方式联系. 本人互联网技术爱好者,互联网技术发烧友 微博:伊直都在0221 QQ:951226918 -----------------------------------------------------------------------------------------------------------------

Activiti 学习笔记记录(三)

上一篇:Activiti 学习笔记记录(二) 导读:上一篇学习了bpmn 画图的常用图形标记.那如何用它们组成一个可用文件呢? 我们知道 bpmn 其实是一个xml 文件

HTML&CSS基础学习笔记8-预格式文本

<pre>标签的主要作用是预格式化文本.被包围在 pre 标签中的文本通常会保留空格和换行符.而文本也会呈现为等宽字体. <pre>标签的一个常见应用就是用来表示计算机的源代码.当然你也可以在你需要在网页中预显示格式时使用它. 会使你的文本换行的标签(例如<h>.<p>)绝不能包含在 <pre> 所定义的块里.尽管有些浏览器会把段落结束标签解释为简单地换行,但是这种行为在所有浏览器上并不都是一样的. 更多学习内容,就在码芽网http://www.

java/android 设计模式学习笔记(14)---外观模式

这篇博客来介绍外观模式(Facade Pattern),外观模式也称为门面模式,它在开发过程中运用频率非常高,尤其是第三方 SDK 基本很大概率都会使用外观模式.通过一个外观类使得整个子系统只有一个统一的高层的接口,这样能够降低用户的使用成本,也对用户屏蔽了很多实现细节.当然,在我们的开发过程中,外观模式也是我们封装 API 的常用手段,例如网络模块.ImageLoader 模块等.其实我们在开发过程中可能已经使用过很多次外观模式,只是没有从理论层面去了解它. 转载请注明出处:http://bl

[原创]java WEB学习笔记48:其他的Servlet 监听器:域对象中属性的变更的事件监听器 (3 个),感知 Session 绑定的事件监听器(2个)

本博客为原创:综合 尚硅谷(http://www.atguigu.com)的系统教程(深表感谢)和 网络上的现有资源(博客,文档,图书等),资源的出处我会标明 本博客的目的:①总结自己的学习过程,相当于学习笔记 ②将自己的经验分享给大家,相互学习,互相交流,不可商用 内容难免出现问题,欢迎指正,交流,探讨,可以留言,也可以通过以下方式联系. 本人互联网技术爱好者,互联网技术发烧友 微博:伊直都在0221 QQ:951226918 ---------------------------------