您好,欢迎访问一九零五行业门户网

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

动态请求数据来更新页面是现在非常常用的方法,比如博客评论的分页动态加载,微博的滚动加载和定时请求加载等。
这些情况下,动态请求返回的数据一般不是已拼好的 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>
更多用模版生成html的框架jquery.tmpl使用详解。
其它类似信息

推荐信息