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 相关文章推荐
再谈ie和firefox下的document.all属性
Oct 21 Javascript
基于node.js的快速开发透明代理
Dec 25 Javascript
JQuery实现动态表格点击按钮表格增加一行
Aug 24 Javascript
详解JavaScript对W3C DOM模版的支持情况
Jun 16 Javascript
jquery 点击元素后,滚动条滚动至该元素位置的方法
Aug 05 Javascript
js判断文件格式及大小的简单实例(必看)
Oct 11 Javascript
微信小程序 网络API发起请求详解
Nov 09 Javascript
微信小程序使用video组件播放视频功能示例【附源码下载】
Dec 08 Javascript
在小程序Canvas中使用measureText的方法示例
Oct 19 Javascript
微信小程序出现wx.getLocation再次授权问题的解决方法分析
Jan 16 Javascript
详解VS Code使用之Vue工程配置format代码格式化
Mar 20 Javascript
JavaScript Dom实现轮播图原理和实例
Feb 19 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 批量生成html,txt文件的实现代码
2013/06/26 PHP
Linux中为php配置伪静态
2014/12/17 PHP
php中的动态调用实例分析
2015/01/07 PHP
php基于session锁防止阻塞请求的方法分析
2017/08/07 PHP
php curl优化下载微信头像的方法总结
2018/09/07 PHP
phpStudy vscode 搭建debug调试的教程详解
2020/07/28 PHP
扩展jQuery 键盘事件的几个基本方法
2009/10/30 Javascript
JavaScript 拾漏补遗
2009/12/27 Javascript
jQuery语法高亮插件支持各种程序源代码语法着色加亮
2013/04/27 Javascript
JQuery中使用ajax传输超大数据的解决方法
2014/07/14 Javascript
AngularJS内置指令
2015/02/04 Javascript
JavaScript中的toLocaleLowerCase()方法使用详解
2015/06/06 Javascript
Vue的Flux框架之Vuex状态管理器
2017/07/30 Javascript
利用nvm管理多个版本的node.js与npm详解
2017/11/02 Javascript
layer弹出层父子页面事件相互调用方法
2018/08/17 Javascript
详解vue-element Tree树形控件填坑路
2019/03/26 Javascript
nodejs实现日志读取、日志查找及日志刷新的方法分析
2019/05/20 NodeJs
小程序封装路由文件和路由方法(5种全解析)
2019/05/26 Javascript
javascript利用键盘控制小方块的移动
2020/04/20 Javascript
[16:01]夜魇凡尔赛茶话会 第二期01:你比划我猜
2021/03/11 DOTA
Python入门篇之文件
2014/10/20 Python
Python中使用装饰器时需要注意的一些问题
2015/05/11 Python
Python的Django框架中if标签的相关使用
2015/07/15 Python
python实现学员管理系统
2019/02/26 Python
Flask框架学习笔记之使用Flask实现表单开发详解
2019/08/12 Python
利用jupyter网页版本进行python函数查询方式
2020/04/14 Python
基于Python的自媒体小助手---登录页面的实现代码
2020/06/29 Python
CSS3之背景尺寸Background-size使用介绍
2013/10/14 HTML / CSS
乐天旅游台湾网站:Rakuten Travel TW
2017/06/01 全球购物
2014年六一儿童节演讲稿
2014/05/23 职场文书
大学生暑期实践报告
2015/07/13 职场文书
莫言获奖感言(全文)
2015/07/31 职场文书
超市员工管理制度
2015/08/06 职场文书
python pyhs2 的安装操作
2021/04/07 Python
Java实现二维数组和稀疏数组之间的转换
2021/06/27 Java/Android
2021年国产动漫公司排行前十名,玄机科技上榜,第二推出过铠甲勇士
2022/03/18 杂记