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+css 网页每次加载不同样式的实现方法
Dec 27 Javascript
javascript加号&quot;+&quot;的二义性说明
Mar 04 Javascript
JS实现的自定义网页拖动类
Nov 06 Javascript
js 右侧浮动层效果实现代码(跟随滚动)
Nov 22 Javascript
Angularjs中的事件广播 —全面解析$broadcast,$emit,$on
May 17 Javascript
Js 获取当前函数参数对象的实现代码
Jun 20 Javascript
JS实现数字格式千分位相互转换方法
Aug 01 Javascript
Javascript Function.prototype.bind详细分析
Dec 29 Javascript
详解Angularjs在控制器(controller.js)中使用过滤器($filter)格式化日期/时间实例
Feb 17 Javascript
详解vuex 渐进式教程实例代码
Nov 27 Javascript
微信小程序定义和调用全局变量globalData的实现
Nov 01 Javascript
Vue.js实现可编辑的表格
Dec 11 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
PHP4引用文件语句的对比
2006/10/09 PHP
php通过文件流方式复制文件的方法
2015/03/13 PHP
PHP实现统计代码行数小工具
2019/09/19 PHP
javascript中获取选中对象的类型
2007/04/02 Javascript
js 匿名调用实现代码
2009/06/19 Javascript
document.onreadystatechange事件的用法分析
2009/10/17 Javascript
有道JavaScript监听浏览器的问题
2010/06/23 Javascript
jquery数组封装使用方法分享(jquery数组遍历)
2014/03/25 Javascript
Bootstrap3学习笔记(二)之排版
2016/05/20 Javascript
Javascript6中字符串的四个新用法分享
2016/09/11 Javascript
JavaScript自定义浏览器滚动条兼容IE、 火狐和chrome
2017/01/05 Javascript
JavaScript订单操作小程序完整版
2017/06/23 Javascript
JavaScript实现正则去除a标签并保留内容的方法【测试可用】
2018/07/18 Javascript
JavaScript eval()函数定义及使用方法详解
2020/07/07 Javascript
[05:48]DOTA2英雄梦之声vol21 屠夫
2014/06/20 DOTA
python3访问sina首页中文的处理方法
2014/02/24 Python
Pandas探索之高性能函数eval和query解析
2017/10/28 Python
Python下载网络小说实例代码
2018/02/03 Python
python 对给定可迭代集合统计出现频率,并排序的方法
2018/10/18 Python
python: 自动安装缺失库文件的方法
2018/10/22 Python
Python读取excel文件中带公式的值的实现
2020/04/17 Python
python安装读取grib库总结(推荐)
2020/06/24 Python
Django框架请求生命周期实现原理
2020/11/13 Python
结合CSS3的布局新特征谈谈常见布局方法
2016/01/22 HTML / CSS
浅谈HTML5新增及移除的元素
2016/06/27 HTML / CSS
为娇小女性量身打造:Petite Studio
2018/11/01 全球购物
Nike香港官网:Nike HK
2019/03/23 全球购物
澳大利亚家具商店:Freedom
2020/12/17 全球购物
农救科工作职责
2013/11/27 职场文书
推荐信格式要求
2014/05/09 职场文书
个人工作违纪检讨书
2015/05/05 职场文书
中小企业员工手册范本
2015/05/14 职场文书
活动主持人开场白
2015/05/28 职场文书
2016党员干部廉政准则学习心得体会
2016/01/20 职场文书
《詹天佑》教学反思
2016/02/20 职场文书
Nginx工作原理和优化总结。
2021/04/02 Servers