jquery tmpl 詳解

來源:互聯網
上載者:User

標籤:

動態請求資料來更新頁面是現在非常常用的方法,比如部落格評論的分頁動態載入,微博的滾動式載入和定時請求載入等。

這些情況下,動態請求返回的資料一般不是已拼好的 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>

jquery tmpl 詳解

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.