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语言中的Literal Syntax特性分析
Mar 08 Javascript
Mootools 1.2教程(2) DOM选择器
Sep 14 Javascript
jQuery MD5加密实现代码
Mar 15 Javascript
用jquery方法操作radio使其默认选项是否
Sep 10 Javascript
jquery得到iframe src属性值的方法
Sep 25 Javascript
JavaScript学习笔记之JS事件对象
Jan 22 Javascript
JS处理json日期格式化问题
Oct 01 Javascript
javascript的 {} 语句块详解
Feb 27 Javascript
Angular使用 ng-img-max 调整浏览器中的图片的示例代码
Aug 17 Javascript
详解vue-cli 构建Vue项目遇到的坑
Aug 30 Javascript
vue页面引入three.js实现3d动画场景操作
Aug 10 Javascript
使用vant的地域控件追加全部选项
Nov 03 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中加密解密函数与DES加密解密实例
2014/10/17 PHP
PHP中mysqli_affected_rows作用行数返回值分析
2014/12/26 PHP
PHP实现原比例生成缩略图的方法
2016/02/03 PHP
PHP简单获取随机数的常用方法小结
2017/06/07 PHP
PHP中16个高危函数整理
2019/09/19 PHP
JS获取IUSR_机器名和IWAM_机器名帐号的密码
2006/12/06 Javascript
javascript中的prototype属性使用说明(函数功能扩展)
2010/08/16 Javascript
js限制文本框为整数和货币的函数代码
2010/10/13 Javascript
js为数字添加逗号并格式化数字的代码
2013/08/23 Javascript
JS获取IP、MAC和主机名的五种方法
2013/11/14 Javascript
JS对文本框值的判断示例
2014/03/10 Javascript
Javascript技术栈中的四种依赖注入小结
2016/02/27 Javascript
JS使用单链表统计英语单词出现次数
2016/06/16 Javascript
JavaScript利用闭包实现模块化
2017/01/13 Javascript
Vue开发中整合axios的文件整理
2017/04/29 Javascript
vue2使用keep-alive缓存多层列表页的方法
2018/09/21 Javascript
Vue data的数据响应式到底是如何实现的
2020/02/11 Javascript
[01:32]DOTA2 2015国际邀请赛中国区预选赛第四日战报
2015/05/29 DOTA
Python学习资料
2007/02/08 Python
深入解析Python中的list列表及其切片和迭代操作
2016/03/13 Python
浅谈pandas中DataFrame关于显示值省略的解决方法
2018/04/08 Python
解决python升级引起的pip执行错误的问题
2018/06/12 Python
python实现定时发送qq消息
2019/01/18 Python
使用python实现抓取腾讯视频所有电影的爬虫
2019/04/15 Python
对Python 中矩阵或者数组相减的法则详解
2019/08/26 Python
英格兰橄榄球商店:England Rugby Store
2016/12/17 全球购物
斯德哥尔摩通票:Stockholm Pass
2018/01/09 全球购物
Missguided美国官网:英国时尚品牌
2018/01/18 全球购物
俄罗斯的精英皮具:Wittchen
2018/01/29 全球购物
英国女性运动服品牌:Sweaty Betty
2018/11/08 全球购物
Java中实现多态的机制
2015/08/09 面试题
学术会议邀请函范文
2014/01/22 职场文书
大学新学期计划书
2014/04/28 职场文书
2015元旦主持词开场白和结束语
2014/12/14 职场文书
python自然语言处理之字典树知识总结
2021/04/25 Python
swagger如何返回map字段注释
2021/07/03 Java/Android