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中Array 对象相关的几个方法
Dec 22 Javascript
jquery遍历之parent()和parents()的区别及parentsUntil()方法详解
Dec 02 Javascript
jquery遍历checkbox介绍
Feb 21 Javascript
JS动态添加iframe的代码
Sep 14 Javascript
浅谈javascript的Touch事件
Sep 27 Javascript
Bootstrap每天必学之按钮(一)
Nov 24 Javascript
基于JS实现新闻列表无缝向上滚动实例代码
Jan 22 Javascript
基于Bootstrap里面的Button dropdown打造自定义select
May 30 Javascript
浅析jQuery操作select控件的取值和设值
Dec 07 Javascript
javascript垃圾收集机制的原理分析
Dec 08 Javascript
vue-cli项目根据线上环境分别打出测试包和生产包
May 23 Javascript
微信小程序自定义菜单切换栏tabbar组件代码实例
Dec 30 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
Linux php 中文乱码的快速解决方法
2016/05/13 PHP
PHP程序员简单的开展服务治理架构操作详解(三)
2020/05/14 PHP
javascript 弹出窗口中是否显示地址栏的实现代码
2011/04/14 Javascript
jQuery实现图片局部放大镜效果
2016/03/17 Javascript
jQuery选择器及jquery案例详解(必看)
2016/05/20 Javascript
详解js实现线段交点的三种算法
2016/08/09 Javascript
js求数组中全部数字可拼接出的最大整数示例代码
2017/08/25 Javascript
webpack配置之后端渲染详解
2017/10/26 Javascript
postman+json+springmvc测试批量添加实例
2018/03/31 Javascript
微信小程序设置全局请求URL及封装wx.request请求操作示例
2019/04/02 Javascript
Vue 幸运大转盘实现思路详解
2019/05/06 Javascript
利用Vue实现一个markdown编辑器实例代码
2019/05/19 Javascript
解决Echarts2竖直datazoom滑动后显示数据不全的问题
2020/07/20 Javascript
Python使用MySQLdb for Python操作数据库教程
2014/10/11 Python
python 时间戳与格式化时间的转化实现代码
2016/03/23 Python
Python基于回溯法子集树模板解决全排列问题示例
2017/09/07 Python
Python 通配符删除文件的实例
2018/04/24 Python
Python爬虫学习之获取指定网页源码
2019/07/30 Python
基于Django实现日志记录报错信息
2019/12/17 Python
Python标准库itertools的使用方法
2020/01/17 Python
python数据预处理 :数据共线性处理详解
2020/02/24 Python
Python引入多个模块及包的概念过程解析
2020/09/21 Python
统计学专业毕业生的自我评价分享
2013/11/28 职场文书
同事吵架检讨书
2014/02/05 职场文书
农村面貌改造提升实施方案
2014/03/18 职场文书
公务员更新知识培训实施方案
2014/03/31 职场文书
个人银行贷款担保书
2014/04/01 职场文书
软件项目实施计划书
2014/05/02 职场文书
市场部岗位职责
2015/02/12 职场文书
驳回起诉裁定书
2015/05/19 职场文书
入党群众意见范文
2015/06/02 职场文书
css3 实现文字闪烁效果的三种方式示例代码
2021/04/25 HTML / CSS
goland 设置project gopath的操作
2021/05/06 Golang
pytorch 中autograd.grad()函数的用法说明
2021/05/12 Python
MySQL 8.0 Online DDL快速加列的相关总结
2021/06/02 MySQL
python使用PySimpleGUI设置进度条及控件使用
2021/06/10 Python