jQuery技术

[原]jQuery .tmpl(), .template()学习(2)

字号+ 作者:H5之家 来源:H5之家 2016-08-06 18:00 我要评论( )

script type="text/javascript"$(function () {var userLangs = [{ ID: 'think8848', Name: 'Joseph Chan', Langs: ['Chinese', 'English'] }, { ID: 'aCloud', Name: 'Mary Cheung', Langs: ['Chinese', 'French']

<script type="text/javascript"> $(function () { var userLangs = [{ ID: 'think8848', Name: 'Joseph Chan', Langs: ['Chinese', 'English'] }, { ID: 'aCloud', Name: 'Mary Cheung', Langs: ['Chinese', 'French']}]; $('#expression').tmpl(userLangs).appendTo('#expressionRows'); }); </script>

效果:

jQuery .tmpl()有两个比较有用的属性:$item、$data:

$item代表当前的模板;$data代表当前的数据。

Html

<table cellspacing="0" cellpadding="3"> <tbody> </tbody> </table>

Javascript

<script type="text/x-jquery-tmpl"> <tr><td>${ID}</td><td>${$data.Name}</td><td>${$item.getLangs('; ')}</td></tr> </script> <script type="text/javascript"> $(function () { var userLangs = [{ ID: 'think8848', Name: 'Joseph Chan', Langs: ['Chinese', 'English'] }, { ID: 'aCloud', Name: 'Mary Cheung', Langs: ['Chinese', 'French']}]; $('#property').tmpl(userLangs, { getLangs: function (separator) { return this.data.Langs.join(separator); } }) .appendTo('#propertyRows'); }); </script>

效果:

{{each}}这个标签一看就知道是做循环用的了,用法如下:

Html

<ul> </ul>

Javascript

<script type="text/x-jquery-tmpl"> <li>ID: ${ID}; Name: ${Name};<br />Langs:<ul>{{each Langs}}<li>${$index + 1}: <label>${$value}. </label></li>{{/each}}<ul></li> </script> <script type="text/javascript"> $(function () { var userLangs = [{ ID: 'think8848', Name: 'Joseph Chan', Langs: ['Chinese', 'English'] }, { ID: 'aCloud', Name: 'Mary Cheung', Langs: ['Chinese', 'French']}]; $('#each').tmpl(userLangs).appendTo('#eachList'); });

效果:

{{each}}还有另一种写法:

Javascript

<script type="text/x-jquery-tmpl"> <li>ID: ${ID}; Name: ${Name};<br />Langs:<ul>{{each(i,lang) Langs}}<li>${i + 1}: <label>${lang}. </label></li>{{/each}}</ul></li> </script>

作用和前一种是一样的。

{{if}}和{{else}},这两个标签应该一看就知道作用了,直接上示例:

Javascript

<script type="text/x-jquery-tmpl"> <tr><td>${ID}</td><td>${Name}</td><td>{{if Langs.length > 1}}${Langs.join('; ')}{{else}}${Langs}{{/if}}</td></tr> </script>

如果Langs数组元素超过1个,则用'; '连接起来,否则就直接显示Langs,效果:

{{html}},直接将对象属性值作为HTML代码替换占位符:

Javascript

<script type="text/x-jquery-tmpl"> <tr><td>${ID}</td><td>${Name}</td><td>{{html Ctrl}}</td></tr> </script> <script type="text/javascript"> $(function () { var ctrls = [{ ID: 'think8848', Name: 'Joseph Chan', Ctrl: '<input type="button" value="Demo" />' }, { ID: 'aCloud', Name: 'Mary Cheung', Ctrl: '<input type="text" value="Demo" />'}]; $('#html').tmpl(ctrls).appendTo('#htmlRows'); }); </script>

效果:

{{tmpl}},前面已经提过该标签了,这里再给一个使用参数的例子:

Javascript

<script type="text/x-jquery-tmpl"> <tr><td>${ID}</td><td>${Name}</td><td> {{tmpl($data) '#tmpl2'}}</td></tr> </script> <script type="type/x-jquery-tmpl"> {{each Langs}}${$value}  {{/each}} </script> <script type="text/javascript"> $(function () { var userLangs = [{ ID: 'think8848', Name: 'Joseph Chan', Langs: ['Chinese', 'English'] }, { ID: 'aCloud', Name: 'Mary Cheung', Langs: ['Chinese', 'French']}]; $('#tmpl1').tmpl(userLangs).appendTo('#tmplRows'); }); </script>

效果:

{{wrap}},包装器,这回不需要指定对哪一个元素使用模板了,直接生成模板的包装器,示例:

Html

<div> </div>

Javascript

<script 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 type="text/x-jquery-tmpl"> <table cellspacing="0" cellpadding="3"><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>

效果:

$.tmplItem()方法,使用这个方法,可以获取从render出来的元素上重新获取$item,示例:

$('tbody').delegate('tr', 'click', function () { var item = $.tmplItem(this); alert(item.data.Name); });

效果:

至此,官方的API中介绍的内容就完了,我的E文水平不高,对于某些细节难免理解不周,如有谬误之处,敬请指正,谢谢。

源代码下载

 

1.本站遵循行业规范,任何转载的稿件都会明确标注作者和来源;2.本站的原创文章,请转载时务必注明文章作者和来源,不尊重原创的行为我们将追究责任;3.作者投稿可能会经我们编辑修改或补充。

相关文章
  • jquery源码学习笔记(一)jQuery的无new构建,jquery学习笔记

    jquery源码学习笔记(一)jQuery的无new构建,jquery学习笔记

    2016-08-07 10:00

  • jQuery.buildFragment()(六)

    jQuery.buildFragment()(六)

    2016-08-06 17:00

  • jQuery基礎 (一)樣式篇

    jQuery基礎 (一)樣式篇

    2016-08-06 14:01

  • jquery小技巧大全介绍

    jquery小技巧大全介绍

    2016-08-03 10:05

网友点评
!