动态请求数据来更新页面是现在非常常用的方法,比如博客评论的分页动态加载,微博的滚动加载和定时请求加载等。 这些情况下,动态请求返回的数据一般不是已拼好的 HTML 就是 JSON 或 XML,总之不在浏览器端拼数据就在服务器端拼数据。不过,从传输量方面来看,返回 HTML 不划算,而在 web 传输方面,现在更多的是使用 JSON 而不是 XML。 浏览器端根据 JSON 生成 HTML 有个很苦恼的地方就是,结构不复杂的时候还好,结构一复杂,就想死了,需要很小心很小心地写出几乎无法维护的 JavaScript 代码。 因此一些用模版生成HTML的的框架相继出现jquery.tmpl 就是其中的一种,下面我们来详细介绍下jquery.tmpl的用法 jquery.tmpl的几种常用标签分别有:
,each,if,else,html不常用标签=,tmplandwrap.
{}等同与{{=}}是输出变量 ${}里面还可以放表达式 (=和变量之间一定要有空格,否则无效) 示例: 复制代码
The following wraps and reorders some HTML content: {{wrap "#tableWrapper"}}
{{/each}}
{{eachitem.html("div")}} {{/each}}
(function () {
$('#myTmpl').tmpl().appendTo('#wrapDemo');
});
复制代码data item item代表当前的模板;$data代表当前的数据。 实例: 复制代码
var item =.tmplItem(this); alert(item.data.Name); });
${ID}
{{= Name}}
${Number(Num)+1}
${Status}
var users = [{ ID: 'think8848', Name: 'Joseph Chan', Num: '1', Status: 1 }, { ID: 'aCloud', Name: 'Mary Cheung', Num: '2'}]; $("#demo").tmpl(users).appendTo('#div_demo');
复制代码
{{each}} 提供循环逻辑,$value访问迭代变量 也可以自定义迭代变量(i,value)
示例:
复制代码
users
{{each(i,user) users}}
${i+1}:{{= user.name}}
{{if i==0}}
group
{{each(j,group) groups}}
${group.name}
{{/each}} {{/if}} {{/each}}
depart
{{each departs}}
{{= $value.name}}
{{/each}} var eachData = { users: [{ name: 'jerry' }, { name: 'john'}], groups: [{ name: 'mingdao' }, { name: 'meihua' }, { name: 'test'}], departs: [{ name: 'IT'}] }; $("#each").tmpl(eachData).appendTo('#div_each');
复制代码
{{if }} {{else}}提供了分支逻辑 {{else}} 相当于else if
示例:
复制代码
${ID}
{{= Name}} {{if Status}}
Status${Status} {{else App}}
App${App} {{else}}
None {{/if}}
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');
复制代码
{{html}} 输出变量html,但是没有html编码,适合输出html代码
实例
复制代码
${ID}
{{= Name}} ${html} {{html html}}
var user = { ID: 'think8848', Name: 'Joseph Chan', html: 'html' }; $("#html").tmpl(user).appendTo('#div_html');
复制代码
{{tmpl}} 嵌套模版
实例
复制代码
${ID}
{{tmpl($data) '#tmpl2'}}
{{each Name}}
$value/each varusers=[ID:′think8848′,Name:[′Joseph′,′Chan′],ID:′aCloud′,Name:[′Mary′,′Cheung′]];
("#tmpl1").tmpl(users).appendTo('#tmpl');
复制代码
{{wrap}},包装器
实例
复制代码
One
First
content
Two
And
more
content...
{{/wrap}} {{each
item.html("h3", true)}}{{/each}}
{{eachitem.html("div")}} {{/each}}
{value} |
{{html $value}} |
$('#myTmpl').tmpl().appendTo('#wrapDemo');
});
复制代码data item item代表当前的模板;$data代表当前的数据。 实例: 复制代码
{data.ID}
{item.getName(" ")}
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'); 复制代码
.tmplItem()方法,使用这个方法,可以获取从render出来的元素上重新获取 item
实例
('#demo').delegate('div', 'click', function () {var item =.tmplItem(this); alert(item.data.Name); });