Javascript模板引擎:Hogan
2015-11-29 14:19 autrol 阅读(1025) 评论(0) 编辑 收藏 举报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); //结果:<span>转义</span><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包含的数据,在其他地方也可以被使用。