用模版生成HTML的的框架jquery.tmpl使用详解


Posted in Javascript onJanuary 07, 2015

动态请求数据来更新页面是现在非常常用的方法,比如博客评论的分页动态加载,微博的滚动加载和定时请求加载等。

这些情况下,动态请求返回的数据一般不是已拼好的 HTML 就是 JSON 或 XML,总之不在浏览器端拼数据就在服务器端拼数据。不过,从传输量方面来看,返回 HTML 不划算,而在 web 传输方面,现在更多的是使用 JSON 而不是 XML。

浏览器端根据 JSON 生成 HTML 有个很苦恼的地方就是,结构不复杂的时候还好,结构一复杂,就想死了,需要很小心很小心地写出几乎无法维护的 JavaScript 代码。

因此一些用模版生成HTML的的框架相继出现jquery.tmpl 就是其中的一种,下面我们来详细介绍下jquery.tmpl的用法

下面重点介绍一下使用方法

首先介绍一下  模板和数据,不用说这两个肯定是不可缺少的

模板有两种定义方法,下面给出具体code

var markup = "<li>Some content: ${item}.<br/>" 

+ " More content: ${myValue}.</li>";
$.template( "movieTemplate", markup );

 
<script id="movieTemplate" type="text/x-jquery-tmpl"> 

<li><b>${Name}</b> (${ReleaseYear})</li> 

</script>

这样就定义了两种模板,前一种写到script里边,后边一种写到html里边

数据用json

下面开始渲染模板

$( "#movieTemplate" ).tmpl( movies ).appendTo( "#movieList" );

$.tmpl( "movieTemplate", movies ).appendTo( "#movieList" );

注意:movies是json数据数组

var movies = [ 

{ Name: "The Red Violin", ReleaseYear: "1998" }, 

{ Name: "Eyes Wide Shut", ReleaseYear: "1999" }, 

{ Name: "The Inheritance", ReleaseYear: "1976" } 

];

jquery.tmpl的几种常用标签分别有:

${}, {{each}}, {{if}}, {{else}}, {{html}}

不常用标签

 {{=}},{{tmpl}} and {{wrap}}.

${}等同与{{=}}是输出变量 ${}里面还可以放表达式 (=和变量之间一定要有空格,否则无效)

示例:

<div id="div_demo">

</div>

<script id="demo" type="text/x-jquery-tmpl">

    <div style="margin-bottom:10px;">

    <span>${ID}</span>

    
<span style="margin-left:10px;">{{= Name}}</span>

    
<span style="margin-left:10px;">${Number(Num)+1}</span>

    
<span style="margin-left:10px;">${Status}</span>

    </div>

</script>

<script type="text/javascript">

var users = [{ ID: 'think8848', Name: 'Joseph Chan', Num: '1', Status: 1 }, { ID: 'aCloud', Name: 'Mary Cheung', Num: '2'}];

$("#demo").tmpl(users).appendTo('#div_demo');

</script>

{{each}} 提供循环逻辑,$value访问迭代变量 也可以自定义迭代变量(i,value)

示例:

<div id="div_each">

</div>

<script id="each" type="text/x-jquery-tmpl"> 

    <h3>users</h3>

    {{each(i,user) users}}

        <div>${i+1}:{{= user.name}}</div>

        {{if i==0}}

            <h4>group</h4>

            {{each(j,group) groups}}

                <div>${group.name}</div>

            {{/each}}

        {{/if}}

    {{/each}}

    <h3>depart</h3>

    {{each departs}}

        <div>{{= $value.name}}</div>

    {{/each}}

</script> 

<script type="text/javascript">
var eachData = { users: [{ name: 'jerry' }, { name: 'john'}], groups: [{ name: 'mingdao' }, { name: 'meihua' }, { name: 'test'}], departs: [{ name: 'IT'}] };

$("#each").tmpl(eachData).appendTo('#div_each');

</script>

{{if }} {{else}}提供了分支逻辑 {{else}} 相当于else if

示例:

<div id="div_ifelse"></div>

<script id="ifelse" type="text/x-jquery-tmpl"> 

    <div style="margin-bottom:10px;"><span>${ID}</span><span style="margin-left:10px;">{{= Name}}</span>

        {{if Status}}

            <span>Status${Status}</span>

        {{else App}}

            <span>App${App}</span>

        {{else}}

            <span>None</span>

        {{/if}}

    </div>

</script> 

<script type="text/javascript">
var users = [{ ID: 'think8848', Name: 'Joseph Chan', Status: 1, App: 0 }, { ID: 'aCloud', Name: 'Mary Cheung', App: 1 }, { ID: 'bMingdao', Name: 'Jerry Jin'}];

    $("#ifelse").tmpl(users).appendTo('#div_ifelse');

</script>

{{html}} 输出变量html,但是没有html编码,适合输出html代码

 实例

<div id="div_html"></div>

<script id="html" type="text/x-jquery-tmpl"> 

    <div style="margin-bottom:10px;">

<span>${ID}</span>


<span style="margin-left:10px;">{{= Name}}</span>

    
${html}

    
{{html html}}

    </div>

</script> 

<script type="text/javascript">

var user = { ID: 'think8848', Name: 'Joseph Chan', html: '<button>html</button>' };

   $("#html").tmpl(user).appendTo('#div_html');

</script>

{{tmpl}} 嵌套模版

实例

<div id="tmpl"></div>

<script id="tmpl1" type="text/x-jquery-tmpl">

    <div style="margin-bottom:10px;">

    <span>${ID}</span>

    
<span style="margin-left:10px;">{{tmpl($data) '#tmpl2'}}</span>

    </div>     

</script>

<script id="tmpl2" type="type/x-jquery-tmpl">

    {{each Name}}${$value}  {{/each}}   

</script>

<script type="text/javascript">

var users = [{ ID: 'think8848', Name: ['Joseph', 'Chan'] }, { ID: 'aCloud', Name: ['Mary', 'Cheung']}];

   $("#tmpl1").tmpl(users).appendTo('#tmpl');

</script>

{{wrap}},包装器

实例

<div id="wrapDemo">

    </div>

<script id="myTmpl" type="text/x-jquery-tmpl">

    The following wraps and reorders some HTML content:

    {{wrap "#tableWrapper"}}

        <h3>One</h3>

        <div>

            First <b>content</b>

        </div>

        <h3>Two</h3>

        <div>

            And <em>more</em> <b>content</b>...

        </div>

    {{/wrap}}

    </script>

<script id="tableWrapper" type="text/x-jquery-tmpl">

    <table cellspacing="0" cellpadding="3" border="1"><tbody>

        <tr>

            {{each $item.html("h3", true)}}

                <td>

                    ${$value}

                </td>

            {{/each}}

        </tr>

        <tr>

            {{each $item.html("div")}}

                <td>

                    {{html $value}}

                </td>

            {{/each}}

        </tr>

    </tbody></table>

    </script>

 <script type="text/javascript">

        $(function () {

            $('#myTmpl').tmpl().appendTo('#wrapDemo');

        });

    </script>

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

 实例:

<div id="div_item_data"></div>

<script id="item_data" type="text/x-jquery-tmpl"> 

     <div style="margin-bottom:10px;">

<span>${$data.ID}</span>


<span style="margin-left:10px;">${$item.getName(" ")}</span>

 </div>

</script> 

<script type="text/javascript">

 
var users = [{ ID: 'think8848', Name: ['Joseph', 'Chan'] }, { ID: 'aCloud', Name: ['Mary', 'Cheung']}];

     $("#item_data").tmpl(users,

                {

                getName: function (spr) {

                   return this.data.Name.join(spr);

                }

                }).appendTo('#div_item_data');

</script>

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

实例

<script type="text/javascript">
$('#demo').delegate('div', 'click', function () {

                var item = $.tmplItem(this);

                alert(item.data.Name);

            });

</script>
Javascript 相关文章推荐
jquery里的each使用方法详解
Dec 22 Javascript
jquery获取及设置outerhtml的方法
Mar 09 Javascript
教你使用javascript简单写一个页面模板引擎
May 05 Javascript
浅谈JSON.parse()和JSON.stringify()
Jul 14 Javascript
Jquery时间轴特效(三种不同类型)
Nov 02 Javascript
jquery判断当前浏览器的实现代码
Nov 07 Javascript
javascript闭包概念简单解析(推荐)
Jun 03 Javascript
js实现添加可信站点、修改activex安全设置,禁用弹出窗口阻止程序
Aug 17 Javascript
详谈jQuery中使用attr(), prop(), val()获取value的异同
Apr 25 jQuery
详解用node编写自己的cli工具
May 23 Javascript
jQuery插件Validation表单验证详解
May 26 jQuery
Vue列表如何实现滚动到指定位置样式改变效果
May 09 Javascript
jQuery中parentsUntil()方法用法实例
Jan 07 #Javascript
jQuery中parents()方法用法实例
Jan 07 #Javascript
jQuery中parent()方法用法实例
Jan 07 #Javascript
jQuery中nextUntil()方法用法实例
Jan 07 #Javascript
jQuery中nextAll()方法用法实例
Jan 07 #Javascript
jQuery中next()方法用法实例
Jan 07 #Javascript
jQuery中find()方法用法实例
Jan 07 #Javascript
You might like
PHP不用递归遍历目录下所有文件的代码
2014/07/04 PHP
Linux系统递归生成目录中文件的md5的方法
2015/06/29 PHP
PHP给文字内容中的关键字进行套红处理
2016/04/12 PHP
PHP面向对象自动加载机制原理与用法分析
2016/10/14 PHP
PHP实现在对象之外访问其私有属性private及保护属性protected的方法
2017/11/20 PHP
js浮点数精确计算(加、减、乘、除)
2013/12/26 Javascript
Javascript 按位与运算符 (&amp;)使用介绍
2014/02/04 Javascript
jQuery实现向下滑出的平滑下拉菜单效果
2015/08/21 Javascript
javascript制作照片墙及制作过程中出现的问题
2016/04/04 Javascript
JQuery DIV 动态隐藏和显示的方法
2016/06/23 Javascript
jquery.validate表单验证插件使用详解
2017/06/21 jQuery
关于vue中watch检测到不到对象属性的变化的解决方法
2018/02/08 Javascript
如何解决vue2.0下IE浏览器白屏问题
2018/09/13 Javascript
vue中组件通信的八种方式(值得收藏!)
2019/08/09 Javascript
[03:28]2014DOTA2国际邀请赛 走近EG战队天才中单Arteezy
2014/07/12 DOTA
[01:03:47]VP vs NewBee Supermajor 胜者组 BO3 第一场 6.5
2018/06/06 DOTA
Python ORM框架SQLAlchemy学习笔记之关系映射实例
2014/06/10 Python
Python机器学习k-近邻算法(K Nearest Neighbor)实例详解
2018/06/25 Python
Python父目录、子目录的相互调用方法
2019/02/16 Python
python挖矿算力测试程序详解
2019/07/03 Python
详解numpy矩阵的创建与数据类型
2019/10/18 Python
详解HTML5之pushstate、popstate操作history,无刷新改变当前url
2017/03/15 HTML / CSS
Tirendo比利时:在线购买轮胎
2018/10/22 全球购物
美国修容界大佬创建的个人美妆品牌:Kevyn Aucoin Beauty
2018/12/12 全球购物
SmartBuyGlasses比利时:购买品牌太阳镜和眼镜
2019/08/09 全球购物
北京某科技有限公司C# .net笔试题
2014/09/27 面试题
初中三好学生事迹材料
2014/01/13 职场文书
数控技术应用个人求职信范文
2014/02/03 职场文书
四年大学自我鉴定
2014/02/17 职场文书
我们的节日国庆活动方案
2014/08/19 职场文书
幼儿园五一劳动节活动总结
2015/02/09 职场文书
入党函调证明材料
2015/06/19 职场文书
Python数据可视化之绘制柱状图和条形图
2021/05/25 Python
python实现A*寻路算法
2021/06/13 Python
Java并发编程之详解CyclicBarrier线程同步
2021/06/23 Java/Android
Windows 11要来了?微软文档揭示Win11太阳谷 / Win10有两个不同版本
2021/11/21 数码科技