hogan.js是一个开源前端模板引擎,无逻辑的设计,简单好用,性能也不错。

使用

引入hogan.js,下载链接:http://www.bootcdn.cn/hogan.js/,然后通过hogan.js语法把模版渲染出来。代码如下:

<script src="hogan.js"></script>
<script>
var data = {
name: "执念"
};
var template = "我的名字:{{name}}"; var hogan = Hogan.compile(template); //Hogan模版对象
var html = hogan.render(data); //结果:我的名字:执念
</script>

模版语法

1、{{keyName}}:

{{}}就是模版的标示符,花括号里的 keyName 表示键名,这句的作用是直接输出与键名匹配的键值,就如上面的例子。

2、{{#keyName}} {{/keyName}}:

#开始、以/结束表示区块,它会根据当前上下文中的键值来对区块进行一次或多次渲染,例如:

var data = {
people: [{
name: "Jack",
age: 18
}, {
name: "Davide",
age: 19
}]
};
var template = "{{#people}}名字:{{name}},年龄:{{age}};{{/people}}"; var hogan = Hogan.compile(template); //Hogan模版对象
var html = hogan.render(data); //结果:名字:Jack,年龄:18;名字:Davide,年龄:19;

{{#keyName}}{{/keyName}}具备简单的判断功能,如果keyName值为null/undefined/false;则不渲染输出任何内容。如:

var data = {
unvisible: false,
visible: true
};
var template = "{{#unvisible}}false;{{/unvisible}}{{#visible}}true{{/visible}}"; var hogan = Hogan.compile(template); //Hogan模版对象
var html = hogan.render(data); //结果:true

 3、{{^keyName}} {{/keyName}}:

与{{^keyName}}{{/keyName}}类似,不同在于它是当keyName值为null/undefined/false时才渲染输出该区块内容。如:

var data = {
unvisible: false,
visible: true
};
var template = "{{#unvisible}}false;{{/unvisible}}{{#visible}}true{{/visible}}";
var hogan = Hogan.compile(template); //Hogan模版对象
var html = hogan.render(data); //结果:true

4、{{.}}:

表示枚举,可以循环输出整个数组,如:

var data = {
array: [1,2,3]
};
var template = "{{#array}}数字:{{.}};{{/array}}";
var hogan = Hogan.compile(template); //Hogan模版对象
var html = hogan.render(data); //结果:数字:1;数字:2;数字:3;

 5、{{>modular}}:

以">"开始表示子模块,如{{>modular}};当结构比较复杂时,我们可以使用该语法将复杂的结构拆分成几个小的子模块,如:

var data = {
name: "执念",
age: 18,
sex: "男"
};
var template1 = "我的名字:{{name}};{{>age}};{{>sex}};";
var template2 = {
age: "年龄:{{age}}",
sex: "性别:{{sex}}"
}; var hogan = Hogan.compile(template1); //Hogan模版对象
var html = hogan.render(data, template2); //结果:我的名字:执念;年龄:18;性别:男;

6、{{{keyName}}}或者{{&keyName}}:

{{keyName}}输出会将等特殊字符转译,如果想保持内容原样输出可以使用{{{}}}或者{{&}},如:

var data = {
specialChar: "<span>转义</span>"
};
var template = "{{specialChar}}<br />{{{specialChar}}}<br />{{&specialChar}}"; var hogan = Hogan.compile(template); //Hogan模版对象
var html = hogan.render(data); //结果:&lt;span&gt;转义&lt;/span&gt;<br /><span>转义</span><br /><span>转义</span>

正常的{{specialChar}}被Hogan转义,最终会以纯文本方式显示,而{{{specialChar}}}和{{&specialChar}}中包含的标签依旧正常输出,未转义。

7、{{!notes}}或者<!-- notes -->:

{{!}}表示注释,注释后不会渲染输出任何内容,但是不足之处在于注释内部不能包含mustache变量,否则会不好用。使用HTML的注释,能够注释掉任何内容。

var data = {
notes: "注释"
};
var template = "{{!notes}}"; var hogan = Hogan.compile(template); //Hogan模版对象
var html = hogan.render(data); //结果:"",空字符串

处理复杂数据

Hogan展示的还可以是一个function返回的结果,function可以读取当前变量的上下文来获取其他属性执行其他操作,如:

var data = {
judgements: [{
name: "Jack",
age: 18
},{
name: "Davide",
age: 35
},{
name: "King",
age: 60
}],
ageStage: function() {
if(this.age < 20) {
return "青年"
}
else if(this.age < 40) {
return "中年"
}
else {
return "老人"
}
}
};
var template = "{{#judgements}}{{name}}人生阶段:{{ageStage}};{{/judgements}}"; var hogan = Hogan.compile(template); //Hogan模版对象
var html = hogan.render(data); //结果:Jack人生阶段:青年;Davide人生阶段:中年;King人生阶段:老人;

通过此种方式,可以对复杂的数据进行处理。从上面可以看出,ageStage并不是judgemengs包含的部分,但是可以被使用,这说明只要是data包含的数据,在其他地方也可以被使用。

Javascript模板引擎:Hogan的更多相关文章

  1. 推荐13款javascript模板引擎

    javaScript 在生成各种页面内容时如果能结合一些模板技术,可以让逻辑和数据之间更加清晰,本文介绍 X 款 JavaScript 的模板引擎.(排名不分先后顺序) 1. Mustache 基于j ...

  2. 各种JS模板引擎对比数据(高性能JavaScript模板引擎)

    最近做了JS模板引擎测试,拿各个JS模板引擎在不同浏览器上去运行同一程序,下面是模板引擎测试数据:通过测试artTemplate.juicer与doT引擎模板整体性能要有绝对优势: js模板引擎 Ja ...

  3. JavaScript模板引擎artTemplate.js——为什么使用模板引擎?

    作为一个工作一年的菜鸟,在公司做了几个外包项目,也接触到了不同形式的web开发.其实也没多少,就是javaweb开发和HTML5移动开发,这两者在页面展示的时候的解决方案还是有所不同的. 1.vo+e ...

  4. 最简单的JavaScript模板引擎

    在小公司待久了感觉自己的知识面很小,最近逛博客园和一些技术网站看大家在说JavaScript模版引擎的事儿,完全没有概念,网上一搜这是08年开始流行起来的...本来以为这是很高深的知识,后来在网上看到 ...

  5. JavaScript模板引擎实例应用

    在之前的一篇名为<移动端基于HTML模板和JSON数据的JavaScript交互>的文章中,我向大家说明了为什么要使用JavaScript模板以及如何使用,文末还提到了laytpl.art ...

  6. JavaScript 模板引擎实现原理解析

    1.入门实例 首先我们来看一个简单模板: <script type="template" id="template"> <h2> < ...

  7. Javascript模板引擎mustache.js详解

    mustache.js是一个简单强大的Javascript模板引擎,使用它可以简化在js代码中的html编写,压缩后只有9KB,非常值得在项目中使用.本文总结它的使用方法和一些使用心得,内容不算很高深 ...

  8. 如何选择Javascript模板引擎(javascript template engine)?

    译者 jjfat 日期:2012-9-17  来源: GBin1.com 随着前端开发的密集度越来越高,Ajax和JSON的使用越来越频繁,大家肯定免不了在前台开发中大量的使用标签,常见到的例子如下: ...

  9. 【JavsScript】推荐五款流行的JavaScript模板引擎

    摘要:Javascript模板引擎作为数据与界面分离工作中最重要一环,受到开发者广泛关注.本文通过开发实例解析五款流行模板引擎:Mustache.Underscore Templates.Embedd ...

  10. Juicer javascript 模板引擎

    模板引擎是为了使用户界面与业务数据(内容)分离而产生的,它可以生成特定格式的文档,用于网站的模板引擎就会生成一个标准的HTML文档. js模板引擎包括如下:template官方参考:http://au ...

随机推荐

  1. LCA + 树状数组 + 树上RMQ

    题目链接:http://poj.org/problem?id=2763 思路:首先求出树上dfs序列,并且标记树上每个节点开始遍历以及最后回溯遍历到的时间戳,由于需要修改树上的某两个节点之间的权值,如 ...

  2. RobotFramework自动化测试之脚本编写(一)

    接触了上一篇的RF环境搭建及安装,相比大家都会觉得,哇塞,为什么要做这么多,那么复杂?装那么多干什么有什么用?写脚本会不会也很复杂? 其实首次安装的话 会觉得有点蒙,也不知道安装那么多是拿来干什么的, ...

  3. poj 3253 Fence Repair

    Fence Repair Time Limit: 2000MS   Memory Limit: 65536K Total Submissions: 42979   Accepted: 13999 De ...

  4. LINUX 查看当前系统的负载情况

    uptime linux uptime命令主要用于获取主机运行时间和查询linux系统负载等信息. eg: # uptime 02:03:50 up 126 days, 12:57, 2 users, ...

  5. XML序列化及反序列化

    //对象序列化xml OutModel outmodel = new OutModel(); XmlSerializer serializer = new XmlSerializer(typeof(O ...

  6. BZOJ 1076 & 撞鸭递推

    题意: 还是看原题题面好... 你正在玩你最喜欢的电子游戏,并且刚刚进入一个奖励关.在这个奖励关里,系统将依次随 机抛出k次宝物,每次你都可以选择吃或者不吃(必须在抛出下一个宝物之前做出选择,且现在决 ...

  7. css记录

    padding padding-top是在绿色边框内,从顶部向下移20像素位置,默认padding-top 为0时,红色边框为20像素高,通过padding-top属性,为顶部增加了20像素,这时顶部 ...

  8. SQL行合并

    CREATE TABLE SC ( Student ), Course ) ) INSERT INTO SC SELECT N'张三',N'大学语文' UNION ALL SELECT N'李四',N ...

  9. java分享第七天-02(读取文件)

    一 读取文件 public static void main(String[] args) throws FileNotFoundException, IOException { // 建立File对 ...

  10. Node.js exports与module.exports的关系

    今天搜索module.exports时看到CNode社区上发的Hack Sparrow一篇相关文章的链接 Node.js Module – exports vs module.exports 一篇5年 ...