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系列(15) 函数(Functions)
Apr 12 Javascript
如何获取JQUERY AJAX返回的JSON结果集实现代码
Dec 10 Javascript
js data日期初始化的5种方法
Dec 29 Javascript
jquery学习总结(超级详细)
Sep 04 Javascript
JS返回iframe中frameBorder属性值的方法
Apr 01 Javascript
JS实现跟随鼠标的链接文字提示框效果
Aug 06 Javascript
JavaScript代码实现禁止右键、禁选择、禁粘贴、禁shift、禁ctrl、禁alt
Nov 17 Javascript
JavaScript实现99乘法表及隔行变色实例代码
Feb 24 Javascript
js中遍历Map对象的方法
Jul 27 Javascript
基于JS实现二维码图片固定在右下角某处并跟随滚动条滚动
Feb 08 Javascript
vue 实现移动端键盘搜索事件监听
Nov 06 Javascript
详解vite+ts快速搭建vue3项目以及介绍相关特性
Feb 25 Vue.js
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
smarty模板引擎基础知识入门
2015/03/30 PHP
php将图片保存为不同尺寸图片的图片类实例
2015/03/30 PHP
php实现当前页面点击下载文件的实例代码
2016/11/16 PHP
使用CSS3实现字体颜色渐变的实现
2021/03/09 HTML / CSS
jQuery getJSON 处理json数据的代码
2010/07/26 Javascript
javascript椭圆旋转相册实现代码
2012/01/16 Javascript
JS事件Event元素(兼容IE,Firefox,Chorme)
2012/11/01 Javascript
jquery动态加载js三种方法实例
2013/08/03 Javascript
纯js实现div内图片自适应大小(已测试,兼容火狐)
2014/06/16 Javascript
批量修改标签css样式以input标签为例
2014/07/31 Javascript
Angular 中 select指令用法详解
2016/09/29 Javascript
基于Vuejs框架实现翻页组件
2020/06/29 Javascript
简单实现IONIC购物车功能
2017/01/10 Javascript
js实现返回顶部效果
2017/03/10 Javascript
Bootstrap 3多级下拉菜单实例
2017/11/23 Javascript
Vue 中的受控与非受控组件的实现
2018/12/17 Javascript
js实现跟随鼠标移动的小球
2019/08/26 Javascript
Vue + Element-ui的下拉框el-select获取额外参数详解
2020/08/14 Javascript
在VUE中使用lodash的debounce和throttle操作
2020/11/09 Javascript
python sqlobject(mysql)中文乱码解决方法
2008/11/14 Python
python 输出一个两行字符的变量
2009/02/05 Python
利用python写个下载teahour音频的小脚本
2017/05/08 Python
快速了解Python中的装饰器
2018/01/11 Python
Python中常用信号signal类型实例
2018/01/25 Python
python-str,list,set间的转换实例
2018/06/27 Python
python直接获取API传递回来的参数方法
2018/12/17 Python
解决.ui文件生成的.py文件运行不出现界面的方法
2019/06/19 Python
flask应用部署到服务器的方法
2019/07/12 Python
Python使用指定端口进行http请求的例子
2019/07/25 Python
python3实现用turtle模块画一棵随机樱花树
2019/11/21 Python
迪士尼西班牙官方网上商店:ShopDisney西班牙
2020/02/02 全球购物
便利店投资创业计划书
2014/02/08 职场文书
安全环保标语
2014/06/09 职场文书
挂职锻炼个人总结
2015/03/05 职场文书
学习商务礼仪心得体会
2016/01/22 职场文书
2019年暑期安全广播稿!
2019/07/03 职场文书