昨晚无意中发现一个有趣的jQuery插件.tmpl(),其文档在这里。官方解释对该插件的说明:将匹配的第一个元素作为模板,render指定的数据,签名如下:
其中参数data的用途很明显:用于render的数据,可以是任意js类型,包括数组和对象。options一般情况下都是选项了,官方指出,此处的options是一个用户自定义的键值对的map,继承自tmplItem数据结构,适用于模板render动作期间。
在这里可以下载到最新的tmpl插件,值的一提的是,官方同时也说明了,tmpl目前是beta版,使用需谨慎..
好吧,先来一个最直观的例子:
复制代码 代码如下:
<%@ Page Language="C#" AutoEventWireup="true" %>
<!DOCTYPE html>
<html>
<head>
<title>jquery template demo</title>
<link rel="stylesheet" href="content/site.css" type="text/css" />
<link rel="stylesheet" href="content/jquery.ui.css" type="text/css" />
<script type="text/javascript" src="scripts/jquery.js"></script>
<script type="text/javascript" src="scripts/jquery.ui.js"></script>
<script type="text/javascript" src="scripts/jquery.tmpl.js"></script>
<script id="myTemplate" type="text/x-jquery-tmpl">
<tr><td>${ID}</td><td>${Name}</td></tr>
</script>
<script type="text/javascript">
$(function () {
var users = [{ ID: 'think8848', Name: 'Joseph Chan' }, { ID: 'aCloud', Name: 'Mary Cheung'}];
$('#myTemplate').tmpl(users).appendTo('#rows');
});
</script>
<style type="text/css">
body
{
padding: 10px;
}
table
{
border-collapse: collapse;
}
</style>
</head>
<body>
<table cellspacing="0" cellpadding="3" border="1">
<tbody id="rows">
</tbody>
</table>
</body>
</html>
例子虽然很小也很简单,但我觉得这个已经很有用了。
当然,.tmpl()还可以使用来自远端的数据,比如说服务:
复制代码 代码如下:
public ActionResult SampleData()
{
var json = new JsonResult();
json.Data = new[] { new { ID = "remote1", Name = "abcd" }, new { ID = "remote2", Name = "efg" } };
json.JsonRequestBehavior = JsonRequestBehavior.AllowGet;
return json;
}
这是一个MVC的Action,我把它当做是一个提供数据的服务,然后js代码如下:
复制代码 代码如下:
$('#btnAjax').click(function () {
$.getJSON('@Url.Action("SampleData", "Home")', function (json) {
$('#rows').empty();
$('#myTemplate').tmpl(json).appendTo('#rows');
});
});
效果:
定义模板时,推荐的方式为定义使用
<script id='templateName' type='text/x-jquery-tmpl'></script> |
做为模板的包装器,但定义方式并不只有这一种,你可以使用
<div id="template" style="display: none;"> </div> |
的方式来定义,但是官方文档中说,这种方法可能会产生浏览器无法解析的HTML,因此不推荐使用,不过我试了下,倒没有出什么意外:
HTML:
复制代码 代码如下:
<div id="container">
</div>
<div id="inline" style="display: none">
<label>
${ID}</label>
<label>
${Name}</label><br />
</div>
Javascript:
复制代码 代码如下:
var users = [{ ID: 'think8848', Name: 'Joseph Chan' }, { ID: 'aCloud', Name: 'Mary Cheung'}];
$('#inline').tmpl(users).appendTo('#container');
效果:
编译缓存模板,在jQuery .tmpl()中,还可以将模板事先编译并缓存起来,然后在合适的时侯再使用,这对于一些数据嵌套是很有用的,如:
Html
复制代码 代码如下:
<table cellspacing="0" cellpadding="3" border="1">
<tbody id="compileRows">
</tbody>
</table>
Javascript
复制代码 代码如下:
<script id="compile1" type="text/x-jquery-tmpl">
{{tmpl 'cached'}}
<tr><td>${ID}</td><td>${Name}</td></tr>
</script>
<script id="compile2" type="type/x-jquery-tmpl">
<tr><td colspan="2">${Group}</td></tr>
</script>
<script type="text/javascript">
$(function () {
var groupUsers = [{ ID: 'think8848', Name: 'Joseph Chan', Group: 'Administrators' }, { ID: 'aCloud', Name: 'Mary Cheung', Group: 'Users'}];
$('#compile2').template('cached');
$('#compile1').tmpl(groupUsers).appendTo('#compileRows');
});
</script>
效果:
$.template()方法,将一段Html编译为模板,示例:
Javascript
复制代码 代码如下:
var markup = '<tr><td>${ID}</td><td>${Name}</td></tr>';
$.template('template', markup);
$.tmpl('template', users).appendTo('#templateRows');
这样就可以将markup中定义的模板应用于templateRows对象。
jQuery .tmpl()的标签,表达式,属性:
${}:从前面的例子来看,这个标签的作用很明显了,相当于是占位符,但是它还有另一种写法{{= field}}如:
复制代码 代码如下:
<script id="myTemplate" type="text/x-jquery-tmpl">
<tr><td>{{= ID}}</td><td>{{= Name}}</td></tr>
</script>
必须要注意的是,"="号后必须跟一个空格,不然是没有效果的。
另外,${}中还可以放表达式,这个牛x吧,如:
Html
复制代码 代码如下:
<table cellspacing="0" cellpadding="3" border="1">
<tbody id="expressionRows">
</tbody>
</table>
Javascript
复制代码 代码如下:
<script type="text/javascript">
$(function () {
var userLangs = [{ ID: 'think8848', Name: 'Joseph Chan', Langs: ['Chinese', 'English'] }, { ID: 'aCloud', Name: 'Mary Cheung', Langs: ['Chinese', 'French']}];
$('#expression').tmpl(userLangs).appendTo('#expressionRows');
});
</script>
效果:
jQuery .tmpl()有两个比较有用的属性:$item、$data:
$item代表当前的模板;$data代表当前的数据。
Html
复制代码 代码如下:
<table cellspacing="0" cellpadding="3" border="1">
<tbody id="propertyRows">
</tbody>
</table>
Javascript
复制代码 代码如下:
<script id="property" type="text/x-jquery-tmpl">
<tr><td>${ID}</td><td>${$data.Name}</td><td>${$item.getLangs('; ')}</td></tr> </script>
<script type="text/javascript">
$(function () {
var userLangs = [{ ID: 'think8848', Name: 'Joseph Chan', Langs: ['Chinese', 'English'] }, { ID: 'aCloud', Name: 'Mary Cheung', Langs: ['Chinese', 'French']}];
$('#property').tmpl(userLangs, {
getLangs: function (separator) {
return this.data.Langs.join(separator);
}
})
.appendTo('#propertyRows');
});
</script>
效果:
{{each}}这个标签一看就知道是做循环用的了,用法如下:
Html
复制代码 代码如下:
<ul id="eachList">
</ul>
Javascript
复制代码 代码如下:
<script id="each" type="text/x-jquery-tmpl">
<li>ID: ${ID}; Name: ${Name};<br />Langs:<ul>{{each Langs}}<li>${$index + 1}: <label>${$value}. </label></li>{{/each}}<ul></li>
</script>
<script type="text/javascript">
$(function () {
var userLangs = [{ ID: 'think8848', Name: 'Joseph Chan', Langs: ['Chinese', 'English'] }, { ID: 'aCloud', Name: 'Mary Cheung', Langs: ['Chinese', 'French']}];
$('#each').tmpl(userLangs).appendTo('#eachList');
});
效果:
{{each}}还有另一种写法:
Javascript
<script id="each2" type="text/x-jquery-tmpl"> |
<li>ID: ${ID}; Name: ${Name};<br />Langs:<ul><STRONG>{{each(i,lang) Langs}}<li>${i + 1}: <label>${lang}. </label></li>{{/each}}</STRONG></ul></li> |
作用和前一种是一样的。
{{if}}和{{else}},这两个标签应该一看就知道作用了,直接上示例:
Javascript
<script id="ifelse" type="text/x-jquery-tmpl"> |
<tr><td>${ID}</td><td>${Name}</td><td>{{if Langs.length > 1}}${Langs.join('; ')}{{else}}${Langs}{{/if}}</td></tr> |
如果Langs数组元素超过1个,则用'; '连接起来,否则就直接显示Langs,效果:
{{html}},直接将对象属性值作为HTML代码替换占位符:
Javascript
<script id="html" type="text/x-jquery-tmpl"> |
<tr><td>${ID}</td><td>${Name}</td><td>{{html Ctrl}}</td></tr> |
<script type="text/javascript"> |
var ctrls = [{ ID: 'think8848', Name: 'Joseph Chan', Ctrl: '<input type="button" value="Demo" />' }, { ID: 'aCloud', Name: 'Mary Cheung', Ctrl: '<input type="text" value="Demo" />'}]; |
$('#html').tmpl(ctrls).appendTo('#htmlRows'); |
效果:
{{tmpl}},前面已经提过该标签了,这里再给一个使用参数的例子:
Javascript
<script id="tmpl1" type="text/x-jquery-tmpl"> |
<tr><td>${ID}</td><td>${Name}</td><td> {{tmpl($data) '#tmpl2'}}</td></tr> |
<script id="tmpl2" type="type/x-jquery-tmpl"> |
{{each Langs}}${$value} {{/each}} |
<script type="text/javascript"> |
var userLangs = [{ ID: 'think8848', Name: 'Joseph Chan', Langs: ['Chinese', 'English'] }, { ID: 'aCloud', Name: 'Mary Cheung', Langs: ['Chinese', 'French']}]; |
$('#tmpl1').tmpl(userLangs).appendTo('#tmplRows'); |
效果:
{{wrap}},包装器,这回不需要指定对哪一个元素使用模板了,直接生成模板的包装器,示例:
Html
Javascript
<script id="myTmpl" type="text/x-jquery-tmpl"> |
The following wraps and reorders some HTML content: |
And <em>more</em> <b>content</b>... |
<script id="tableWrapper" type="text/x-jquery-tmpl"> |
<table cellspacing="0" cellpadding="3" border="1"><tbody> |
{{each $item.html("h3", true)}} |
{{each $item.html("div")}} |
<script type="text/javascript"> |
$('#myTmpl').tmpl().appendTo('#wrapDemo'); |
效果:
$.tmplItem()方法,使用这个方法,可以获取从render出来的元素上重新获取$item,示例:
$('tbody').delegate('tr', 'click', function () { |
var item = $.tmplItem(this); |
效果:
至此,官方的API中介绍的内容就完了,我的E文水平不高,对于某些细节难免理解不周,如有谬误之处,敬请指正,谢谢。
源代码下载
相关推荐:
什么叫seo优化留痕,seo信息流优化 惠阳seo推广优化价格
什么系统有利于seo,哪些方法有利于seo 栖霞网站建设方案
什么是基本的seo,基本seo技术 荆州seo排名技术
seo有什么工作方向,seo从事什么行业的工作 |直播|推广营销场景选什么
CentOS 6.8上快速搭建VPS SS指南
VPS数据库安装疑难解析手册,轻松解决安装难题!
seo网络排名优化,全面的seo网站优化排名 望城区市场营销推广中心
seo智能优化是什么,seo自动优化工具 ,ai描边的形状
做seo学什么技术好,seo好学吗 同安建设信息网站首页
SEO是什么化学,seo是啥意思啊 ,牛奶包装ai关键词
手机连接VPS控制台操作详解,轻松上手,安全无忧!
阿里云Gentoo2VPS,云服务高效虚拟化部署的新选择
《*采集站:带你领略全球最全*资源的宝藏平台》,公司网站建设和优化
机房消防前景怎么样啊?
个性化酷Q环境轻松搭建指南,利用VPS实现高效挂酷体验新篇章
为什么做酒店seo,为什么做酒店 ,ai绘制宿舍
SEO攻略:搜索引擎优化,快速提升网站排名,山西抖音seo软件工具
合金装备VPS4全新升级深度解析,独特功能与性能亮点全揭秘!
揭秘VPS SS用户数量,究竟有多少人使用?
关键词优化怎样做,关键词优化如何 dedecms修改seo标题的箭头
SEO北京:数字时代,企业成功的关键,高端网站建设seo优化
中原科技电脑机房怎么样?
VPS共享服务能否搭建网站?一文解答所有疑问!
seo是什么seo查询,seo是什么seo怎么做 ,AI到新歌
seo需要懂什么源码,seo需要懂什么源码技术 ,体ai
seo菲律宾是做什么,菲律宾网址排名 ,ai怎么转换成ai
互联互通机房怎么样?
SEO重要性与企业互联网发展的必由之路,旅游海外推广网站
seo是什么意思seo是什么职位,seo是什么工作内容 seo关键词快速获得排名的方法
SEO调整,助力网站流量爆发式增长!,网站建设抖音
SEO就业前景如何?打造数字时代的职业新风口,金华seo优化图片
seo是什么必看,seo是干啥的 ,ai 诺诺
seo是什么通俗解释,seo到底是什么 ,小ai点唱
SEO技术如何通过优化提升网站流量与排名,镇江营销推广代运营
独家揭秘,国内网速超快VPS推荐,畅享网络畅游无阻!
学seo做什么好,学seo容易吗 嘉园网站建设
seo网站代码是什么,网站专业术语中seo意思是什么 ,类ai写作
seo是什么职业 社区,seo属于什么职业 ,ai科技挂画
seo或者sem是什么,sem是seo的一部分吗 闽侯网站seo公司
怀孕后去机房会怎么样吗?
seo有什么难点,seo难吗 ,环绕字海报ai
SEO这样做,轻松引爆流量,助力企业成长,芜湖网站推广巍薪hfqjwl下拉
SEO查看-如何通过精确分析提升网站流量与排名,中山神马seo代运营
SEO观看:如何通过优化提升您的网站流量和品牌影响力,怀柔区网站建设要多少钱
SEO确实是企业增长的关键,这些技巧让你走在行业前沿,茂名市seo排名收费
seo是什么定义在哪,seo指的什么 宁波鄞州区h5网站建设
京东业绩再创新高:未来电商巨头的成功之道,清远个人网站推广多少钱
SEO功能:助力网站流量提升与品牌曝光,seo天天网络株洲
揭秘英诺VPS的神秘面纱,究竟是何方神圣?
SEO部:开启数字化营销新纪元的幕后英雄,大众*网站建设