jQuery .tmpl() 用法示例介绍


Posted in Javascript onAugust 21, 2014

动态请求数据来更新页面是现在非常常用的方法,比如博客评论的分页动态加载,微博的滚动加载和定时请求加载等。

这些情况下,动态请求返回的数据一般不是已拼好的 HTML 就是 JSON 或 XML,总之不在浏览器端拼数据就在服务器端拼数据。不过,从传输量方面来看,返回 HTML 不划算,而在 web 传输方面,现在更多的是使用 JSON 而不是 XML。

浏览器端根据 JSON 生成 HTML 有个很苦恼的地方就是,结构不复杂的时候还好,结构一复杂,就想死了,需要很小心很小心地写出几乎无法维护的 JavaScript 代码。

如同为解决 PHP 拼数据这方面的问题而有了 Smarty 这些模版,JavaScript 也可以利用模版来解决这些问题,比如基于 jQuery 的 jquery.tmpl,现在已经被接受为官方的模版插件了。详细的 API 在 jQuery 的 Templates 里,内置的 demo 也尽情地演示了各种用法。

就我自己的几次使用,感觉很不错,用更加直观方面的 HTML 写法而不是 JavaScript 拼凑 来写结构,然后用 JSON 变量来占位的方式来填充数据,代码看起来好多了。

Tmpl提供了几种tag:

${}:等同于{{=}},是输出变量,通过了html编码的。
{{html}}:输出变量html,但是没有html编码,适合输出html代码。
{{if }} {{else}}:提供了分支逻辑。
{{each}}:提供循环逻辑,$value访问迭代变量。

jquery tmpl的使用方法:

模板定义:

方法一:

<script id="movieTemplate" type="text/x-jquery-tmpl"> 
<li> 
<b>${Name}</b> (${ReleaseYear}) 
</li> 
</script>

方法二:

function makeTemplate(){ 
var markup='<li><b>${Name}</b> (${ReleaseYear})</li>‘; 
$.template(“movieTemplate”, markup); 
}

DATA:

var movies = [ 
{ Name: "The Red Violin", ReleaseYear: "1998" }, 
{ Name: "Eyes Wide Shut", ReleaseYear: "1999" }, 
{ Name: "The Inheritance", ReleaseYear: "1976" } 
];

Script:

$( "#movieTemplate" ).tmpl( movies ) 
.appendTo( "#movieList" );

实例1:

<!DOCTYPE html> 
<html> 
<head> 
<script src="http://code.jquery.com/jquery-latest.min.js"></script> 
<script src="http://ajax.microsoft.com/ajax/jquery.templates/beta1/jquery.tmpl.min.js"></script> 
</head> 
<body> 

<ul class="param-list"></ul> 

<script type="text/x-jquery-tmpl" id="new-param-tmpl"> 
<li rel="${num}"> 
<input type="text" name="key[${num}]" value="${key}" placeholder="key" /> = 
<input type="text" name="value[${num}]" value="${value}" placeholder="value" /> 
<button type="button" class="button small remove-param"><img src="http://mediacdn.disqus.com/1338845651/images/v3/icon/16/69.png" height="12" alt=""/></button> 
<button type="button" class="button small add-param"><span><img src="http://mediacdn.disqus.com/1338845651/images/v3/icon/16/13.png" height="12" alt=""/></button> 
</li> 
</script> 

<script> 
$(function(){ 
function addParam(key, value) { 
var param_list = $('.param-list'); 
var num = param_list.find('li').length; 

// build a template to clone the current row 
var built = $('#new-param-tmpl').tmpl({ 
num: num, 
key: key || '', 
value: value || '', 
}); 
if (key) param_list.prepend(built); 
else param_list.append(built); 

param_list.find('li:not(:last) .add-param').hide(); 
param_list.find('li:last .add-param').show(); 
param_list.find('li:not(:last) .remove-param').show(); 
param_list.find('li:last .remove-param').hide(); 
} 

// bind events 
$('.param-list .remove-param').live('click', function(){ 
$(this).parent().remove(); 
return false; 
}); 
$('.param-list .add-param').live('click', function(){ 
addParam(); 
return false; 
}); 

addParam(); 
})
</script> 
</body> 
</html>

实例2

<ul id="movieList"></ul> 

<script id="movieTemplate" type="text/x-jquery-tmpl"> 
<li><b>${Name}</b> (${ReleaseYear})</li> 
</script> 

<script type="text/javascript"> 
var movies = [ 
{ Name: "The Red Violin", ReleaseYear: "1998" }, 
{ Name: "Eyes Wide Shut", ReleaseYear: "1999" }, 
{ Name: "The Inheritance", ReleaseYear: "1976" } 
]; 

// Render the template with the movies data and insert 
// the rendered HTML under the "movieList" element 
$( "#movieTemplate" ).tmpl( movies ) 
.appendTo( "#movieList" ); 
</script>
Javascript 相关文章推荐
javascript的原生方法获取数组中的最大(最小)值
Dec 19 Javascript
ExtJs默认的字体大小改变的几种方法(自己整理)
Apr 18 Javascript
javascript制作的cookie封装及使用指南
Jan 02 Javascript
js实现的捐赠管理完整实例
Jan 20 Javascript
jQuery中slideUp 和 slideDown 的点击事件
Feb 26 Javascript
jquery弹出遮掩层效果【附实例代码】
Apr 28 Javascript
jQuery实现点击按钮文字变成input框点击保存变成文字
May 09 Javascript
js实现鼠标拖动功能
Mar 20 Javascript
node中Express 动态设置端口的方法
Aug 04 Javascript
Vue2.0 vue-source jsonp 跨域请求
Aug 04 Javascript
实例讲解JavaScript 计时事件
Jul 04 Javascript
js实现简单的轮播图效果
Dec 13 Javascript
jQuery控制TR显示隐藏的三种常用方法
Aug 21 #Javascript
jQuery截取指定长度字符串代码
Aug 21 #Javascript
jquery实现的下拉和收缩效果示例
Aug 21 #Javascript
简单的jquery左侧导航栏和页面选中效果
Aug 21 #Javascript
使用jQuery设置disabled属性与移除disabled属性
Aug 21 #Javascript
JS使用for循环遍历Table的所有单元格内容
Aug 21 #Javascript
Javascript 绘制 sin 曲线过程附图
Aug 21 #Javascript
You might like
php escape URL编码
2008/12/10 PHP
php实现URL加密解密的方法
2016/11/17 PHP
利用PHPExcel读取Excel的数据和导出数据到Excel
2017/05/12 PHP
BOOM vs RR BO3 第二场2.13
2021/03/10 DOTA
Mac OS X 系统下安装和部署Egret引擎开发环境
2014/09/03 Javascript
JavaScript的Date()方法使用详解
2015/06/09 Javascript
jQuery动画显示和隐藏效果实例演示(附demo源码下载)
2015/12/31 Javascript
使用javascript插入样式
2016/03/14 Javascript
通过sails和阿里大于实现短信验证
2017/01/04 Javascript
JavaScript省市级联下拉菜单实例
2017/02/14 Javascript
js 调用百度分享功能
2017/02/27 Javascript
JS基于for语句编写的九九乘法表示例
2018/01/04 Javascript
使用watch监听路由变化和watch监听对象的实例
2018/02/24 Javascript
简单了解vue中的v-if和v-show的区别
2019/10/08 Javascript
Python实现的石头剪子布代码分享
2014/08/22 Python
python实现合并两个数组的方法
2015/05/16 Python
python计算圆周率pi的方法
2015/07/11 Python
Python装饰器基础详解
2016/03/09 Python
手把手教你用python抢票回家过年(代码简单)
2018/01/21 Python
Python2.7.10以上pip更新及其他包的安装教程
2018/06/12 Python
python用pandas数据加载、存储与文件格式的实例
2018/12/07 Python
Python enumerate函数功能与用法示例
2019/03/01 Python
numpy下的flatten()函数用法详解
2019/05/27 Python
python并发爬虫实用工具tomorrow实用解析
2019/09/25 Python
python列表生成器迭代器实例解析
2019/12/19 Python
PyCharm汉化安装及永久激活详细教程(靠谱)
2020/01/16 Python
python爬虫构建代理ip池抓取数据库的示例代码
2020/09/22 Python
利用python为PostgreSQL的表自动添加分区
2021/01/18 Python
经典c++面试题五
2014/12/17 面试题
毕业证丢失证明
2014/01/15 职场文书
内刊编辑求职自荐书范文
2014/02/19 职场文书
班主任工作经验交流材料
2014/05/13 职场文书
高中教师考核方案
2014/05/18 职场文书
公司更名通知函
2015/04/24 职场文书
小学运动会报道稿
2015/07/22 职场文书
《植树问题》教学反思
2016/03/03 职场文书