template.js的使用心得
template.js是一款JavaScript模板引擎,用来渲染页面的。
原理:提前将Html代码放进编写模板
<script id="tpl" type="text/html"></script>
中,当需要渲染页面时,在js里这样调用:
var tpl = document.getElementById('tpl').innerHTML; template(tpl, data});
template.js可以使用命令安装,也可以在git上面下载:https://github.com/yanhaijing/template.js
template.js开始标签默认为<%,结束标签默认为%>,显示数据为<%= i %>。

下面是使用template.js v0.7.1版本的实验结果:
1、遍历数组显示数据:
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title></title>
</head>
<body>
<div id="wp"></div>
<script id="tpl" type="text/html">
<ul>
<%for(var i in items){%>
<li>
name:<%=items[i].name%> val:<%=items[i].val%>
</li>
<%}%>
</ul>
</script>
<script src="../template.js"></script>
<script>
var data={
items:[{'name':'名字一','val':'数据一'},
{'name':'名字二','val':'数据二'},
{'name':'名字三','val':'数据三'},
{'name':'名字四','val':'数据四'}
]
}
var html = template(document.getElementById('tpl').innerHTML,data);
document.getElementById('wp').innerHTML = html;
</script>
</body>
</html>

2、模拟子模板
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>模拟子模版</title>
</head>
<body>
<div id="wp"></div> <script id="tpl" type="text/html">
<h1>国内新闻</h1>
<%:=newsListTpl({list: list1, tpl: childTpl})%>
<h1>国际新闻</h1>
<%:=newsListTpl({list: list2, tpl: childTpl})%>
</script> <script id="child-tpl" type="text/html">
<ul>
<% for(i in list){ %>
<li><%=list[i].title%> <%=list[i].desc%></li>
<% } %>
</ul>
</script>
<script src="../template.js"></script>
<script>
var childTpl = template(document.getElementById('child-tpl').innerHTML);
var data={
newsListTpl: childTpl,
list1: [
{title: '国内标题1', desc: '国内描述1'},
{title: '国内标题2', desc: '国内描述2'},
{title: '国内标题3', desc: '国内描述3'},
],
list2: [
{title: '国际标题1', desc: '国际描述1'},
{title: '国际标题2', desc: '国际描述2'},
{title: '国际标题3', desc: '国际描述3'},
],
}
console.log(data);
var html = template(document.getElementById('tpl').innerHTML,data);
document.getElementById('wp').innerHTML = html; </script>
</body>
</html>

3、子模板里面的子模板
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>模拟子模版</title>
</head>
<body>
<div id="wp"></div> <script id="tpl" type="text/html">
<h1>国内新闻</h1>
<%:=listTpl({list: list1, tpl: subChildTpl})%>
<h1>国际新闻</h1>
<%:=listTpl({list: list2, tpl: subChildTpl})%>
</script> <script id="child-tpl" type="text/html">
<ul>
<% for(i in list){ %>
<%:=tpl(list[i])%>
<% } %>
</ul>
</script>
<script id="sub-child-tpl" type="text/html">
<li>
<%=title%> <%=desc%>
</li>
</script>
<script src="../template.js"></script>
<script>
var childTpl = template(document.getElementById('child-tpl').innerHTML);
var subChildTpl = template(document.getElementById('sub-child-tpl').innerHTML);
var data={
listTpl: childTpl,
newsChildTpl:subChildTpl,
list1: [
{title: '国内标题1', desc: '国内描述1'},
{title: '国内标题2', desc: '国内描述2'},
{title: '国内标题3', desc: '国内描述3'},
],
list2: [
{title: '国际标题1', desc: '国际描述1'},
{title: '国际标题2', desc: '国际描述2'},
{title: '国际标题3', desc: '国际描述3'},
],
}
console.log(data);
var html = template(document.getElementById('tpl').innerHTML,data);
document.getElementById('wp').innerHTML = html; </script>
</body>
</html>

4.foreach循环获取数据
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title></title>
</head>
<body>
<div id="wp"></div>
<script id="tpl" type="text/html">
<ul>
<%items.forEach(function(item){%>
<li><%=item.name%> <%=item.val%></li>
<%})%>
</ul>
</script>
<script src="../template.js"></script>
<script>
var data={
items:[{'name':'名字一','val':'数据一'},
{'name':'名字二','val':'数据二'},
{'name':'名字三','val':'数据三'},
{'name':'名字四','val':'数据四'}
]
}
var html = template(document.getElementById('tpl').innerHTML,data);
document.getElementById('wp').innerHTML = html;
</script>
</body>
</html>

5、registerFunction
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title></title>
</head>
<body>
<div id="wp"></div>
<script id="tpl" type="text/html">
<h5><%=selfFun()%></h5>
<h5><%=selfFun2()%></h5>
</script>
<script src="../template.js"></script>
<script>
template.registerFunction('selfFun', function () {
return '自创函数1'
});
template.registerFunction('selfFun2', function () {
return '自创函数2'
});
var html = template(document.getElementById('tpl').innerHTML,{});
document.getElementById('wp').innerHTML = html;
</script>
</body>
</html>

6、registerModifier
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title></title>
</head>
<body>
<div id="wp"></div>
<script id="tpl" type="text/html">
<h5><%:up='newbie is ace'%></h5>
</script>
<script src="../template.js"></script>
<script>
template.registerModifier('up', function (str) {
return str.toUpperCase();
}); var html = template(document.getElementById('tpl').innerHTML,{});
document.getElementById('wp').innerHTML = html;
</script>
</body>
</html>

template.js的使用心得的更多相关文章
- jQuery.template.js 简单使用
之前看了一篇文章<我们为什么要尝试前后端分离>,深有同感,并有了下面的评论: 我最近也和前端同事在讨论这个问题,比如有时候前端写好页面给后端了,然后后端把这些页面拆分成很多的 views, ...
- template.js遍历对象的写法
<!DOCTYPE html><html><head> <meta charset="utf-8"> <title>菜鸟 ...
- 我是这样使用template.js来异步渲染数据的
总监的代码用的是define+module.exports,为了效率先没去了解那一块,在github上找了一款功能单一的template.js来使用 https://github.com/yanhai ...
- jquery template.js前端模板引擎
作为现代应用,ajax的大量使用,使得前端工程师们日常的开发少不了拼装模板,渲染模板 在刚有web的时候,前端与后端的交互,非常直白,浏览器端发出URL,后端返回一张拼好了的HTML串.浏览器对其进行 ...
- 出位的template.js 基于jquery的模板渲染插件
找了好几款基于jquery的模板渲染插件,无一感觉很难用(教程较少.绑定不统一),也可能我智商问题,比如jquery template.js .jtemplate.js. 然后在github上找到这一 ...
- javascript模板引擎template.js使用
到GitHub上下载template.js库.引入到页面 以type="text/html" 这样指定javascript类型的是一种javascript模板渲染方法,在实际项目中 ...
- artTemplate/template.js模板将时间戳格式化为正常的日期
1:引用<script type="text/javascript" src="../js/artTemplate/template.js">< ...
- template.js简单入门
template.js是一款开源的JavaScript模板引擎,用来渲染页面的. github地址 https://github.com/yanhaijing/template.js 下载templa ...
- JavaScript模板引擎Template.js使用详解
这篇文章主要为大家详细介绍了JavaScript模板引擎Template.js使用方法,具有一定的参考价值,感兴趣的小伙伴们可以参考一下 template.js 一款 JavaScript 模板引 ...
随机推荐
- Leetcode - 461. Hamming Distance n&=(n-1) (C++)
1. 题目链接:https://leetcode.com/problems/hamming-distance/description/ 2.思路 常规做法做完看到评论区一个非常有意思的做法.用了n&a ...
- 【SSH进阶之路】Struts + Spring + Hibernate 进阶开端(一)
[SSH进阶之路]Struts + Spring + Hibernate 进阶开端(一) 标签: hibernatespringstrutsssh开源框架 2014-08-29 07:56 9229人 ...
- 3.hadoop完全分布式搭建
3.Hadoop完全分布式搭建 1.完全分布式搭建 配置 #cd /soft/hadoop/etc/ #mv hadoop local #cp -r local full #ln -s full ha ...
- sqoop-1.4.6安装与使用
一.安装 1.下载sqoop-1.4.6-bin.tar.gz并解压 2.修改conf/sqoop-env.sh,设置如下变量: export HADOOP_COMMON_HOME=/usr/loca ...
- eg_3
3. 编写一个程序,返回一个 double 类型的二维数组,数组中的元素通过解析字符串参数获得,如字符串参数:“1,2;3,4,5;6,7,8”,则对应的数组为: d[0][0]=1.0, d[0][ ...
- LintCode-61.搜索区间
搜索区间 给定一个包含 n 个整数的排序数组,找出给定目标值 target 的起始和结束位置. 如果目标值不在数组中,则返回[-1, -1] 样例 给出[5, 7, 7, 8, 8, 10]和目标值t ...
- TCP系列20—重传—10、早期重传(ER)
一.介绍 在前面介绍thin stream时候我们介绍过有两种场景下可能不会产生足够的dup ACK来触发快速重传,一种是游戏类响应交互式tcp传输,另外一种是传输受到拥塞控制的限制,只能发送少量TC ...
- <Effective C++>读书摘要--Templates and Generic Programming<一>
1.The initial motivation for C++ templates was straightforward: to make it possible to create type-s ...
- netem设置了网卡的流量控制,为啥发包的延迟就搞不定呢?
为啥我用netem做了一个流量的控制 但是发送的时候,感觉真正发送数据的时候还是没有达到每一个数据包都是1s的延迟呀,这里的1s的延迟是啥意思啊? 这里的delay并不是说每个数据包都delay 5s ...
- Delphi中正常窗口的实现
摘要: 在Delphi的VCL库中,为了使用以及实现的方便,应用对象Application创建了一个用来处理消息响应的隐藏窗口.而正是这个窗口,使得用VCL开发出来的程序存在着与其他窗口不能正常排列平 ...