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学习阶段性总结(2)--(X)HTML学习
Feb 03 Javascript
在jQuery中 关于json空对象筛选替换
Apr 15 Javascript
移动Web中图片自适应的两种JavaScript解决方法
Jun 18 Javascript
js图片上传前预览功能(兼容所有浏览器)
Aug 24 Javascript
一步一步封装自己的HtmlHelper组件BootstrapHelper(二)
Sep 14 Javascript
jsTree使用记录实例
Dec 01 Javascript
JavaScript实现构造json数组的方法分析
Aug 17 Javascript
iview在vue-cli3如何按需加载的方法
Oct 31 Javascript
如何在JavaScript中谨慎使用代码注释
Jun 21 Javascript
JS实现简易留言板增删功能
Feb 08 Javascript
jQuery实现的上拉刷新功能组件示例
May 01 jQuery
解决VUE项目使用Element-ui 下拉组件的验证失效问题
Nov 07 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
PHPnow安装服务[apache_pn]失败的问题的解决方法
2010/09/10 PHP
PHP用GD库生成高质量的缩略图片
2011/03/09 PHP
PHP开发注意事项总结
2015/02/04 PHP
php+ajax实现无刷新分页
2015/11/18 PHP
PHP常用工具类大全附全部代码下载
2015/12/07 PHP
简单谈谈PHP中的include、include_once、require以及require_once语句
2016/04/23 PHP
php简单实现单态设计模式的方法分析
2017/07/28 PHP
Laravel框架路由和控制器的绑定操作方法
2018/06/12 PHP
XmlUtils JS操作XML工具类
2009/10/01 Javascript
jQuery对表单元素的取值和赋值操作代码
2011/05/19 Javascript
JQuery1.8 判断元素是否绑定事件的方法
2014/07/10 Javascript
Node.js中的缓冲与流模块详细介绍
2015/02/11 Javascript
浅谈javascript获取元素transform参数
2015/07/24 Javascript
jQuery autoComplete插件两种使用方式及动态改变参数值的方法详解
2016/10/24 Javascript
原生js实现弹出层登录拖拽功能
2016/12/05 Javascript
借助node实战JSONP跨域实例
2017/03/30 Javascript
JSONP原理及应用实例详解
2018/09/13 Javascript
JS中min函数实例讲解
2019/02/18 Javascript
微信小程序人脸识别功能代码实例
2019/05/07 Javascript
javascript创建元素和删除元素实例小结
2019/06/19 Javascript
Vue 实现分页与输入框关键字筛选功能
2020/01/02 Javascript
OpenLayers3实现测量功能
2020/09/25 Javascript
利用Fn.py库在Python中进行函数式编程
2015/04/22 Python
Python实现将目录中TXT合并成一个大TXT文件的方法
2015/07/15 Python
基于python select.select模块通信的实例讲解
2017/09/21 Python
Python简单获取网卡名称及其IP地址的方法【基于psutil模块】
2018/05/24 Python
超简单使用Python换脸实例
2019/03/27 Python
Python collections中的双向队列deque简单介绍详解
2019/11/04 Python
解决django migrate报错ORA-02000: missing ALWAYS keyword
2020/07/02 Python
波兰在线运动商店:YesSport
2020/07/23 全球购物
车间班长岗位职责
2013/11/30 职场文书
2014年两会学习心得范例
2014/03/17 职场文书
高三毕业寄语
2014/04/10 职场文书
土木工程求职信
2014/05/29 职场文书
《中彩那天》教学反思
2016/02/24 职场文书
PHP实现rar解压读取扩展包小结
2021/06/03 PHP