jquery tmpl模板(实例讲解)


Posted in jQuery onSeptember 02, 2017

之前用模板渲染都是用angular,无意间发现了jquery tmpl这种轻量级,其文档在这里

官方解释对该插件的说明:将匹配的第一个元素作为模板,render指定的数据,签名如下:

.tmpl([data,][options])

其中参数data的用途很明显:用于render的数据,可以是任意js类型,包括数组和对象。options一般情况下都是选项了,官方指出,此处的options是一个用户自定义的键值对的map,继承自tmplItem数据结构,适用于模板render动作期间。

在这里可以下载到最新的tmpl插件,值的一提的是,官方同时也说明了,tmpl目前是beta版,使用需谨慎..

下面是一个简单的例子

<!DOCTYPE html>
<html>
<head>
 <title>jquery template demo</title>
 <script type="text/javascript" src="js/jquery-1.11.1.min.js"></script>
 <script type="text/javascript" src="js/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: 'hao1', Name: 'Tony' }, { ID: 'hao2', Name: 'Mary hui'}];
   $('#myTemplate').tmpl(users).appendTo('#rows');
  });
 </script>
 <style type="text/css">
  body
  {
   padding: 10px;
  }
  table
  {
   border-collapse: collapse;
  }
 </style>
</head>
<body>
 <table cellspacing="0" cellpadding="4" border="1">
  <tbody id="rows">
  </tbody>
 </table>
</body>
</html>

其效果如下

jquery tmpl模板(实例讲解)

定义模板时,推荐的方式为定义使用

<script id='templateName' type='text/x-jquery-tmpl'></script>

做为模板的包装器,但定义方式并不只有这一种,你可以使用

<div id="template" > <!-- markup --></div>

编译缓存模板,在jQuery .tmpl()中,还可以将模板事先编译并缓存起来,然后在合适的时侯再使用,这对于一些数据嵌套是很有用的,如:

HTML:

<table cellspacing="0" cellpadding="4" 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: 'hao1', Name: 'Tony', Group: 'Administrators' }, { ID: 'hao2', Name: 'Mary hui', Group: 'Users'}];
  $('#compile2').template('cached');
  $('#compile1').tmpl(groupUsers).appendTo('#compileRows');
 });
</script>

其效果如下

jquery tmpl模板(实例讲解)

$.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>

必须要注意的是,"="号后必须跟一个空格,不然是没有效果的。

jQuery .tmpl()有两个比较有用的属性:$item、$data:

$item代表当前的模板;$data代表当前的数据。

Html

<table cellspacing="0" cellpadding="4" 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: 'hao1', Name: 'Tony', Langs: ['PHP', 'Python'] }, { ID: 'hao2', Name: 'Mary hui', Langs: ['Java', 'C#']}];
  $('#property').tmpl(userLangs, {
   getLangs: function (separator) {
    return this.data.Langs.join(separator);
   }
   }).appendTo('#propertyRows');
  });
</script>

jquery tmpl模板(实例讲解)

{{each}}这个标签一看就知道是做循环用的了,用法如下:(关键词{{each Array}}、$value、$index)

HTML

<ul id="ul_each"></ul>

Javascript

<script id="eachList" type="text/x-jquery-tmpl">
 <li class="li">
 <span class="a">ID: ${ID};</span>
 <span class="b">Name: ${Name};</span><br/>
 <span class="c">Langs:
  <ul>
  {{each Langs}}
   <li>
   ${$index + 1}:${$value}.
   </li>
  {{/each}}
  </ul>
 </span>
 </li>
</script>
<script type="text/javascript">
 $(function () {
 var userLangs = [{ ID: 'hao1', Name: 'Tony', Langs: ['PHP', 'Python'] }, { ID: 'hao2', Name: 'Mary hui', Langs: ['Java', 'C#']}];
 $('#eachList').tmpl(userLangs).appendTo('#ul_each');
 });
</script>

其效果如下

jquery tmpl模板(实例讲解)

{{each}}还有另一种写法:

Javascript

<script id="eachList2" type="text/x-jquery-tmpl">
 <li class="li">
 <span class="a">ID: ${ID};</span>
 <span class="b">Name: ${Name};</span><br/>
 <span class="c">Langs:
  <ul>
  {{each(i,lang) Langs}}
   <li>
   ${i+1}:${lang}
   </li>
  {{/each}}
  </ul>
 </span>
 </li>
</script>

作用和前一种是一样的。

{{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>
</script>

如果Langs数组元素超过1个,则用'; '连接起来,否则就直接显示Langs,效果如下:

jquery tmpl模板(实例讲解)

{{html}},直接将对象属性值作为HTML代码替换占位符

$.tmplItem()方法,使用这个方法,可以获取从render出来的元素上重新获取$item,示例:

$('tbody').delegate('tr', 'click', function () {
 var item = $.tmplItem(this);
 alert(item.data.Name);
});

效果如下:

jquery tmpl模板(实例讲解)

以上这篇jquery tmpl模板(实例讲解)就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持三水点靠木。

jQuery 相关文章推荐
jQuery插件select2利用ajax高效查询大数据列表(可搜索、可分页)
May 19 jQuery
jQuery的时间datetime控件在AngularJs中的使用实例(分享)
Aug 17 jQuery
jQuery中.attr()和.data()的区别分析
Sep 03 jQuery
基于jquery trigger函数无法触发a标签的两种解决方法
Jan 06 jQuery
jQuery插件Validation表单验证详解
May 26 jQuery
JS与jQuery判断文本框还剩多少字符可以输入的方法
Sep 01 jQuery
jQuery实现上下滚动公告栏详细代码
Nov 21 jQuery
jQuery创建折叠式菜单
Jun 15 jQuery
jQuery实现的记住帐号密码功能完整示例
Aug 03 jQuery
jQuery实现提交表单时不提交隐藏div中input的方法
Oct 08 jQuery
jquery实现聊天机器人
Feb 08 jQuery
jQuery实现容器间的元素拖拽功能
Dec 01 jQuery
jQuery EasyUI结合zTree树形结构制作web页面
Sep 01 #jQuery
JQuery EasyUI 结合ztrIee的后台页面开发实例
Sep 01 #jQuery
jquery操作ul的一些操作笔记整理(干货)
Aug 31 #jQuery
jquery插件开发之选项卡制作详解
Aug 30 #jQuery
基于jQuery的左滑出现删除按钮的示例
Aug 29 #jQuery
jQuery实现简单的计时器功能实例分析
Aug 29 #jQuery
jQuery动态添加.active 实现导航效果代码思路详解
Aug 29 #jQuery
You might like
让Nginx支持ThinkPHP的URL重写和PATHINFO的方法分享
2011/08/08 PHP
php多个字符串替换成同一个的解决方法
2013/06/18 PHP
使用PHP获取当前url路径的函数以及服务器变量
2013/06/29 PHP
PHP使用ffmpeg给视频增加字幕显示的方法
2015/03/12 PHP
PHP分享图片的生成方法
2018/04/25 PHP
Prototype Object对象 学习
2009/07/12 Javascript
jquery一句话全选/取消全选
2011/03/01 Javascript
JavaScript学习笔记记录我的旅程
2012/05/23 Javascript
url参数中有+、空格、=、%、&amp;、#等特殊符号的问题解决
2013/05/15 Javascript
javascript 小数取整简单实现方式
2014/05/30 Javascript
javascript笛卡尔积算法实现方法
2015/04/08 Javascript
JavaScript中日期的相关操作方法总结
2015/10/24 Javascript
JavaScript setTimeout使用闭包功能实现定时打印数值
2015/12/18 Javascript
详解WordPress开发中get_current_screen()函数的使用
2016/01/11 Javascript
jQuery Html控件基本操作(日常收集整理)
2016/03/11 Javascript
js实现统计字符串中特定字符出现个数的方法
2016/08/02 Javascript
jQuery遍历节点树方法分析
2016/09/08 Javascript
浅谈js中同名函数和同名变量的执行问题
2017/02/12 Javascript
Angular 4依赖注入学习教程之组件服务注入(二)
2017/06/04 Javascript
[48:22]VGJ.S vs VG 2018国际邀请赛小组赛BO2 第一场 8.16
2018/08/17 DOTA
python抓取文件夹的所有文件
2018/02/27 Python
通过selenium抓取某东的TT购买记录并分析趋势过程解析
2019/08/15 Python
通过celery异步处理一个查询任务的完整代码
2019/11/19 Python
使用python动态生成波形曲线的实现
2019/12/04 Python
Python正则re模块使用步骤及原理解析
2020/08/18 Python
Python collections模块的使用方法
2020/10/09 Python
Python监听键盘和鼠标事件的示例代码
2020/11/18 Python
大学生职业生涯规划书范文
2014/01/04 职场文书
高中军训广播稿
2014/01/14 职场文书
中专生毕业个人鉴定
2014/02/26 职场文书
党员入党表决心的话
2014/03/11 职场文书
优秀的导游求职信范文
2014/04/06 职场文书
服务标兵事迹材料
2014/05/04 职场文书
会议邀请函
2015/01/30 职场文书
党员干部廉洁自律承诺书
2015/04/28 职场文书
2017大学生寒假社会实践心得体会
2016/01/14 职场文书