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学习笔记(九)javascript中的原型(prototype)及原型链的继承方式
Apr 12 Javascript
Javascript 函数parseInt()转换时出现bug问题
May 20 Javascript
asp知识整理笔记3(问答模式)
Sep 27 Javascript
Vue2.0实现将页面中表格数据导出excel的实例
Aug 09 Javascript
vue组件中使用iframe元素的示例代码
Dec 13 Javascript
iview table render集成switch开关的实例
Mar 14 Javascript
微信小程序多音频播放进度条问题
Aug 28 Javascript
vue父组件触发事件改变子组件的值的方法实例详解
May 07 Javascript
小程序如何获取多个formId实现详解
Sep 20 Javascript
uniapp与webview之间的相互传值的实现
Jun 29 Javascript
vue数据更新UI不刷新显示的解决办法
Aug 06 Javascript
Node实现搜索框进行模糊查询
Jun 28 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实现支持GET,POST,Multipart/form-data的HTTP请求类
2014/09/24 PHP
php使用unset()删除数组中某个单元(键)的方法
2015/02/17 PHP
Yii2――使用数据库操作汇总(增删查改、事务)
2016/12/19 PHP
JavaScript 参考教程
2006/12/29 Javascript
将函数的实际参数转换成数组的方法
2010/01/25 Javascript
jQuery的实现原理的模拟代码 -4 重要的扩展函数 extend
2010/08/03 Javascript
JQuery勾选指定name的复选框集合并显示的方法
2015/05/18 Javascript
Jquery+Ajax+PHP+MySQL实现分类列表管理(上)
2015/10/28 Javascript
JS实现网页右侧带动画效果的伸缩窗口代码
2015/10/29 Javascript
每天一篇javascript学习小结(String对象)
2015/11/18 Javascript
jQuery fancybox在ie浏览器下无法显示关闭按钮的解决办法
2016/02/19 Javascript
基于javascript制作微博发布栏效果
2016/04/04 Javascript
一个非常好用的文字滚动的案例,鼠标悬浮可暂停[两种方案任选]
2016/12/01 Javascript
Centos6.8下Node.js安装教程
2017/05/12 Javascript
详解微信小程序设置底部导航栏目方法
2017/06/29 Javascript
JavaScript闭包和回调详解
2017/08/09 Javascript
JS计算距当前时间的时间差实例
2017/12/29 Javascript
JavaScript Dom 绑定事件操作实例详解
2019/10/02 Javascript
Vue封装Axios请求和拦截器的步骤
2020/09/16 Javascript
[02:41]DOTA2英雄基础教程 谜团
2013/12/10 DOTA
python在非root权限下的安装方法
2018/01/23 Python
django 使用 request 获取浏览器发送的参数示例代码
2018/06/11 Python
python 3调用百度OCR API实现剪贴板文字识别
2018/09/04 Python
在Pycharm中项目解释器与环境变量的设置方法
2018/10/29 Python
使用pycharm在本地开发并实时同步到服务器
2019/08/02 Python
使用Django xadmin 实现修改时间选择器为不可输入状态
2020/03/30 Python
Python爬虫设置Cookie解决网站拦截并爬取蚂蚁短租的问题
2021/02/22 Python
CSS3中颜色线性渐变实战
2015/07/18 HTML / CSS
俄罗斯在线手表和珠宝商店:AllTime
2019/09/28 全球购物
毕业生的自我评价分享
2013/12/18 职场文书
党员入党表决心的话
2014/03/11 职场文书
公司合作协议书范本
2014/04/18 职场文书
2016年综治宣传月活动宣传标语口号
2016/03/16 职场文书
深入解析Apache Hudi内核文件标记机制
2022/03/31 Servers
python库Tsmoothie模块数据平滑化异常点抓取
2022/06/10 Python
Python时间操作之pytz模块使用详解
2022/06/14 Python