昨晚无意中发现一个有趣的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文水平不高,对于某些细节难免理解不周,如有谬误之处,敬请指正,谢谢。
源代码下载
相关推荐:
公司网站制作需要多少钱义乌,公司办个官网需要多少钱?
商务网站设计制作流程,电子商务网站设计应注意哪些问题?
长沙做网站要多少钱,长沙国安网络怎么样?
培训网站制作网站,全国中小学教师网络研修平台网站怎么注册?
装修招标网站设计制作流程,装修招标流程?
怎么用手机制作网站链接,dw怎么把手机适应页面变成网页?
交易网站制作流程,我想开通一个网站,注册一个交易网址,需要那些手续?
北京制作网站的公司,北京铁路集团官方网站?
英语简历制作免费网站推荐,如何将简历翻译成英文?
个人网站怎么制作html和css,我想自己制作一个网页,请问怎么制作?
javascript createElement()创建input不能设置name属性的解决方法
网站制作软件有哪些,制图软件有哪些?
一键制作网站软件下载安装,一键自动采集网页文档制作步骤?
网站制作需要会哪些技术,建立一个网站要花费多少?
学习ExtJS Window常用方法
jQuery slider Content(左右控制移动)
制作网站哪家好,*游戏网站怎么搭建?
js removeChild 障眼法 可能出现的错误
PHP 木马攻击的防御设置方法
流程图制作网站免费,谁能推荐几个好的CG原画资源网站么?
asp 采集程序常用函数分析
网页设计与网站制作内容,怎样注册网站?
昆明高端网站制作公司,昆明公租房申请网上登录入口?
网站制作的步骤包括,正确网址格式怎么写?
杭州银行网站设计制作流程,杭州银行怎么开通认证方式?
模具网站制作流程,如何找模具客户?
企业网站制作费用多少,企业网站空间一般需要多大,费用是多少?
vbs 调用中文语音让你电脑听你的命令的实现代码
外贸公司网站制作哪家好,maersk船公司官网?
公司网站制作费用多少,为公司建立一个网站需要哪些费用?
公司网站制作价格怎么算,公司办个官网需要多少钱?
win2003 iis 不支持请求(iis iso)的解决方法分析
seo网站制作优化,网站SEO优化步骤有哪些?
外贸公司网站制作,外贸网站建设一般有哪些步骤?
佛山网站制作系统,佛山企业变更地址网上办理步骤?
css网站制作参考文献有哪些,易聊怎么注册?
SQL Server 高速缓存依赖分析
制作充值网站的软件,做人力招聘为什么要自己交端口钱?
专业的网站制作设计是什么,如何制作一个企业网站,建设网站的基本步骤有哪些?
制作网站的软件有哪些,如何在电脑上建立一个网站,谢谢啊?
AJAX 客户端响应速度提高分析
图册素材网站设计制作软件,图册的导出方式有几种?
h5在线制作网站电脑版下载,h5网页制作软件?
成都响应式网站开发,dw怎么把手机适应页面变成网页?
JSP request(return String)用法详例
自贡建网站,自贡观察投稿方法?
怎么制作网站设计模板图片,有电商商品详情页面的免费模板素材网站推荐吗?
网站企业制作流程,用什么语言做企业网站比较好?
公众号制作网站秀米,微信公众号怎么做内置网站?
制作视频的网站有哪些,怎么做一个收费视频网站?