jquery.tmpl.min.js--前端实现模版--数据绑定
动态请求数据来更新页面是现在非常常用的方法,比如博客评论的分页动态加载,微博的滚动加载和定时请求加载等。
这些情况下,动态请求返回的数据一般不是已拼好的HTML就是JSON或XML,总之不在浏览器端拼数据就在服务器端拼数据。不过,从传输量方面来看,返回HTML不划算,而在web传输方面,现在更多的是使用JSON而不是XML。
浏览器端根据JSON生成HTML有个很苦恼的地方就是,结构不复杂的时候还好,结构一复杂,就想死了,需要很小心很小心地写出几乎无法维护的JavaScript代码。
因此一些用模版生成HTML的的框架相继出现jquery.tmpl 就是其中的一种,下面我们来详细介绍下jquery.tmpl的用法
下载地址:https://github.com/BorisMoore/jquery-tmpl
远程引入
<scriptsrc="http://ajax.aspnetcdn.com/ajax/jQuery/jquery-1.8.0.js"></script><scriptsrc="http://ajax.microsoft.com/ajax/jquery.templates/beta1/jquery.tmpl.min.js"></script>
jquery.tmpl的几种常用标签分别有:
${},{{each}},{{if}},{{else}},{{html}}
不常用标签
{{=}},{{tmpl}}and{{wrap}}.
${}等同与{{=}}是输出变量${}里面还可以放表达式 (=和变量之间一定要有空格,否则无效)
<divid="div_demo"></div><scriptid="demo"type="text/x-jquery-tmpl"><divstyle="margin-bottom:10px;"> <span>${ID}</span> <spanstyle="margin-left:10px;">{{=Name}}</span> <spanstyle="margin-left:10px;">${Number(Num)+1}</span> <spanstyle="margin-left:10px;">${Status}</span></div></script><scripttype="text/javascript"> varusers=[{ID:'think8848',Name:'JosephChan',Num:'1',Status:1},{ID:'aCloud',Name:'MaryCheung',Num:'2'}]; $("#demo").tmpl(users).appendTo('#div_demo');</script>
{{each}}提供循环逻辑,$value访问迭代变量 也可以自定义迭代变量(i,value)
<divid="div_each"></div><scriptid="each"type="text/x-jquery-tmpl"><h4>users</h4>{{each(i,user)users}}<div>${i+1}:{{=user.name}}</div>{{ifi==0}}<h5>group</h5>{{each(j,group)groups}}<div>${group.name}</div>{{/each}}{{/if}}{{/each}}<h4>depart</h4>{{eachdeparts}}<div>{{=$value.name}}</div>{{/each}}</script><scripttype="text/javascript"> vareachData={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
<divid="div_ifelse"></div><scriptid="ifelse"type="text/x-jquery-tmpl"><divstyle="margin-bottom:10px;"><span>${ID}</span><spanstyle="margin-left:10px;">{{=Name}}</span>{{ifStatus}}<span>Status${Status}</span>{{elseApp}}<span>App${App}</span>{{else}}<span>None</span>{{/if}}</div></script><scripttype="text/javascript"> varusers=[{ID:'think8848',Name:'JosephChan',Status:1,App:0},{ID:'aCloud',Name:'MaryCheung',App:1},{ID:'bMingdao',Name:'JerryJin'}];$("#ifelse").tmpl(users).appendTo('#div_ifelse');</script>
{{html}}输出变量html,但是没有html编码,适合输出html代码
<divid="div_html"></div><scriptid="html"type="text/x-jquery-tmpl"><divstyle="margin-bottom:10px;"> <span>${ID}</span> <spanstyle="margin-left:10px;">{{=Name}}</span> ${html} {{htmlhtml}}</div></script><scripttype="text/javascript"> varuser={ID:'think8848',Name:'JosephChan',html:'<button>html</button>'}; $("#html").tmpl(user).appendTo('#div_html');</script>
{{tmpl}}嵌套模版
<divid="tmpl"></div><scriptid="tmpl1"type="text/x-jquery-tmpl"><divstyle="margin-bottom:10px;"> <span>${ID}</span> <spanstyle="margin-left:10px;">{{tmpl($data)'#tmpl2'}}</span></div></script><scriptid="tmpl2"type="type/x-jquery-tmpl">{{eachName}}${$value}{{/each}}</script><scripttype="text/javascript"> varusers=[{ID:'think8848',Name:['Joseph','Chan']},{ID:'aCloud',Name:['Mary','Cheung']}];$("#tmpl1").tmpl(users).appendTo('#tmpl');</script>
{{wrap}},包装器
<divid="wrapDemo"></div><scriptid="myTmpl"type="text/x-jquery-tmpl">ThefollowingwrapsandreorderssomeHTMLcontent:{{wrap"#tableWrapper"}}<h4>One</h4><div>First<b>content</b></div><h4>Two</h4><div>And<em>more</em><b>content</b>...</div>{{/wrap}}</script><scriptid="tableWrapper"type="text/x-jquery-tmpl"><tablecellspacing="0"cellpadding="3"border="1"><tbody><tr>{{each$item.html("h4",true)}}<td>${$value}</td>{{/each}}</tr><tr>{{each$item.html("div")}}<td>{{html$value}}</td>{{/each}}</tr></tbody></table></script><scripttype="text/javascript">$(function(){$('#myTmpl').tmpl().appendTo('#wrapDemo');});</script>
$data $item$item代表当前的模板;$data代表当前的数据。
<divid="div_item_data"></div><scriptid="item_data"type="text/x-jquery-tmpl"><divstyle="margin-bottom:10px;"> <span>${$data.ID}</span> <spanstyle="margin-left:10px;">${$item.getName("")}</span> </div></script><scripttype="text/javascript"> varusers=[{ID:'think8848',Name:['Joseph','Chan']},{ID:'aCloud',Name:['Mary','Cheung']}];$("#item_data").tmpl(users,{getName:function(spr){returnthis.data.Name.join(spr);}}).appendTo('#div_item_data');</script>
$.tmplItem()方法,使用这个方法,可以获取从render出来的元素上重新获取$item
声明:本站所有文章资源内容,如无特殊说明或标注,均为采集网络资源。如若本站内容侵犯了原著者的合法权益,可联系本站删除。