jQuery .tmpl() 用法示例介紹
動態(tài)請求數(shù)據(jù)來更新頁面是現(xiàn)在非常常用的方法,比如博客評論的分頁動態(tài)加載,微博的滾動加載和定時請求加載等。
這些情況下,動態(tài)請求返回的數(shù)據(jù)一般不是已拼好的 HTML 就是 JSON 或 XML,總之不在瀏覽器端拼數(shù)據(jù)就在服務器端拼數(shù)據(jù)。不過,從傳輸量方面來看,返回 HTML 不劃算,而在 web 傳輸方面,現(xiàn)在更多的是使用 JSON 而不是 XML。
瀏覽器端根據(jù) JSON 生成 HTML 有個很苦惱的地方就是,結構不復雜的時候還好,結構一復雜,就想死了,需要很小心很小心地寫出幾乎無法維護的 JavaScript 代碼。
如同為解決 PHP 拼數(shù)據(jù)這方面的問題而有了 Smarty 這些模版,JavaScript 也可以利用模版來解決這些問題,比如基于 jQuery 的 jquery.tmpl,現(xiàn)在已經(jīng)被接受為官方的模版插件了。詳細的 API 在 jQuery 的 Templates 里,內(nèi)置的 demo 也盡情地演示了各種用法。
就我自己的幾次使用,感覺很不錯,用更加直觀方面的 HTML 寫法而不是 JavaScript 拼湊 來寫結構,然后用 JSON 變量來占位的方式來填充數(shù)據(jù),代碼看起來好多了。
Tmpl提供了幾種tag:
${}:等同于{{=}},是輸出變量,通過了html編碼的。
{{html}}:輸出變量html,但是沒有html編碼,適合輸出html代碼。
{{if }} {{else}}:提供了分支邏輯。
{{each}}:提供循環(huán)邏輯,$value訪問迭代變量。
jquery tmpl的使用方法:
模板定義:
方法一:
<script id="movieTemplate" type="text/x-jquery-tmpl">
<li>
<b>${Name}</b> (${ReleaseYear})
</li>
</script>
方法二:
function makeTemplate(){
var markup='<li><b>${Name}</b> (${ReleaseYear})</li>‘;
$.template(“movieTemplate”, markup);
}
DATA:
var movies = [
{ Name: "The Red Violin", ReleaseYear: "1998" },
{ Name: "Eyes Wide Shut", ReleaseYear: "1999" },
{ Name: "The Inheritance", ReleaseYear: "1976" }
];
Script:
$( "#movieTemplate" ).tmpl( movies ) .appendTo( "#movieList" );
實例1:
<!DOCTYPE html>
<html>
<head>
<script src="http://code.jquery.com/jquery-latest.min.js"></script>
<script src="http://ajax.microsoft.com/ajax/jquery.templates/beta1/jquery.tmpl.min.js"></script>
</head>
<body>
<ul class="param-list"></ul>
<script type="text/x-jquery-tmpl" id="new-param-tmpl">
<li rel="${num}">
<input type="text" name="key[${num}]" value="${key}" placeholder="key" /> =
<input type="text" name="value[${num}]" value="${value}" placeholder="value" />
<button type="button" class="button small remove-param"><img src="http://mediacdn.disqus.com/1338845651/images/v3/icon/16/69.png" height="12" alt=""/></button>
<button type="button" class="button small add-param"><span><img src="http://mediacdn.disqus.com/1338845651/images/v3/icon/16/13.png" height="12" alt=""/></button>
</li>
</script>
<script>
$(function(){
function addParam(key, value) {
var param_list = $('.param-list');
var num = param_list.find('li').length;
// build a template to clone the current row
var built = $('#new-param-tmpl').tmpl({
num: num,
key: key || '',
value: value || '',
});
if (key) param_list.prepend(built);
else param_list.append(built);
param_list.find('li:not(:last) .add-param').hide();
param_list.find('li:last .add-param').show();
param_list.find('li:not(:last) .remove-param').show();
param_list.find('li:last .remove-param').hide();
}
// bind events
$('.param-list .remove-param').live('click', function(){
$(this).parent().remove();
return false;
});
$('.param-list .add-param').live('click', function(){
addParam();
return false;
});
addParam();
})
</script>
</body>
</html>
實例2
<ul id="movieList"></ul>
<script id="movieTemplate" type="text/x-jquery-tmpl">
<li><b>${Name}</b> (${ReleaseYear})</li>
</script>
<script type="text/javascript">
var movies = [
{ Name: "The Red Violin", ReleaseYear: "1998" },
{ Name: "Eyes Wide Shut", ReleaseYear: "1999" },
{ Name: "The Inheritance", ReleaseYear: "1976" }
];
// Render the template with the movies data and insert
// the rendered HTML under the "movieList" element
$( "#movieTemplate" ).tmpl( movies )
.appendTo( "#movieList" );
</script>
相關文章
jQuery Migrate 1.1.0 Released 注意事項
jQuery開發(fā)團隊前一段時間發(fā)布了jQuery 1.9版本,刪除了1.8版本中的部分API,為了使前端開發(fā)者能夠順利遷移至該版本,該團隊還發(fā)布了遷移插件jQuery Migrate2014-06-06
根據(jù)Bootstrap Paginator改寫的js分頁插件
本文主要對根據(jù)Bootstrap Paginator改寫的js插件進行詳細介紹,具有很好的參考價值,需要的朋友一起來看下吧2016-12-12
使用jQuery+HttpHandler+xml模擬一個三級聯(lián)動的例子
昨天同學問我有關如何快速讀取多層級xml文件的問題,于是我就使用省、市、縣模擬了一個三級聯(lián)動的例子,客戶端使用jQuery實現(xiàn)異步加載服務器返回的json數(shù)據(jù),服務器端則使用XPath表達式查詢數(shù)據(jù)。2011-08-08

