jquery tmpl 详解(转)

动态请求数据来更新页面是现在非常常用的方法,比如博客评论的分页动态加载,微博的滚动加载和定时请求加载等。

这些情况下,动态请求返回的数据一般不是已拼好的 HTML 就是 JSON 或 XML,总之不在浏览器端拼数据就在服务器端拼数据。不过,从传输量方面来看,返回 HTML 不划算,而在 web 传输方面,现在更多的是使用 JSON 而不是 XML。

浏览器端根据 JSON 生成 HTML 有个很苦恼的地方就是,结构不复杂的时候还好,结构一复杂,就想死了,需要很小心很小心地写出几乎无法维护的 JavaScript 代码。

因此一些用模版生成HTML的的框架相继出现jquery.tmpl
就是其中的一种,下面我们来详细介绍下jquery.tmpl的用法

jquery.tmpl的几种常用标签分别有:

${}{{each}}{{if}}{{else}}{{html}}

不常用标签

{{=}},{{tmpl}} and {{wrap}}.

${}等同与{{=}}是输出变量 ${}里面还可以放表达式
(=和变量之间一定要有空格,否则无效)

示例:

?





1

2

3

4

5

6

7

8

9

10

11

12

13

14

<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)

示例:

?





1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

<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

示例:

?





1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

<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代码

实例

?





1

2

3

4

5

6

7

8

9

10

11

12

13

<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}} 嵌套模版

实例

?





1

2

3

4

5

6

7

8

9

10

11

12

13

14

<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}},包装器

实例

?





1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

37

38

<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代表当前的数据。

实例:

?





1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

<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

实例

?





1

2

3

4

5

6

<script type="text/javascript">

  $(‘#demo‘).delegate(‘div‘, ‘click‘, function
() {

                var
item = $.tmplItem(this);

                alert(item.data.Name);

            });

</script>

  

jquery tmpl 详解(转),码迷,mamicode.com

时间: 2024-08-07 08:23:49

jquery tmpl 详解(转)的相关文章

jquery tmpl 详解

动态请求数据来更新页面是现在非常常用的方法,比如博客评论的分页动态加载,微博的滚动加载和定时请求加载等. 这些情况下,动态请求返回的数据一般不是已拼好的 HTML 就是 JSON 或 XML,总之不在浏览器端拼数据就在服务器端拼数据.不过,从传输量方面来看,返回 HTML 不划算,而在 web 传输方面,现在更多的是使用 JSON 而不是 XML. 浏览器端根据 JSON 生成 HTML 有个很苦恼的地方就是,结构不复杂的时候还好,结构一复杂,就想死了,需要很小心很小心地写出几乎无法维护的 Ja

jQuery内核详解与实践读书笔记1:原型技术分解2

上一篇已经搭建了一个非常简陋的jQuery框架雏形,如没有阅读搭建过程,请先阅读<jQuery内核详解与实践读书笔记1:原型技术分解1>初始搭建过程.接下来,完成书中介绍的剩下三个步骤: 7. 延续--功能扩展 jQuery框架是通过extend()函数来扩展功能的,extend()函数的功能实现起来也很简单,它只是吧指定对象的方法复制给jQuery对象或jQuery.prototype对象,如下示例代码就为jQuery类和原型定义了一个扩展功能的函数extend(). 1 var $ = j

jQuery内核详解与实践读书笔记1:原型技术分解1

一直以来都有研究一下jQuery源代码的想法,但是每次看到jQuery几千行的代码,头就大了,没有一点头绪,也不知道从哪里开始.昨天去图书馆无意间发现了这本<jQuery内核详解和实践>,翻看了一下里面的内容,这正是我寻觅多时剖析jQuery源码的好书. 废话不多说,直入正题吧.第一章介绍了一下jQuery的起步和一些历史故事,没什么重要内容.这里直接进入第二章,jQuery技术解密,从这一章开始就全部是干货了.这一章主要分四部分:jQuery原型技术分解,破解jQuery选择器接口,解析jQ

jQuery css详解

今天确确实实是放了一天假,喝了点小酒,看了天天向上和快乐大本营以及中国好舞蹈,越来越热爱舞蹈了,还是总结一篇吧. @jquery css css(name|pro|[,val|fn):访问或设置匹配元素的样式属性 1 $("div").click(function(){ 2 $(this).css({width:20px,height:30px}) 3 }); offset([coordinates]):获取匹配元素在当前视口(body)的相对偏移 1 <p>hello b

转:jQuery.lazyload详解使用方法

来源:http://www.cnblogs.com/wenbo/archive/2011/07/15/2107579.html jQuery实现图片延迟加载,不知道是否可以节省带宽呢?有人知道吗? 这究竟只是一个视觉特效还是真的能延迟加载减少服务器的请求呢? <script type="text/javascript" src="<?php bloginfo('template_directory');?>/js/jquery.lazyload.js&quo

jQuery回调、递延对象总结(一)jQuery.Callbacks详解

前言: 作为参数传递给另一个函数执行的函数我们称为回调函数,那么该回调又是否是异步的呢,何谓异步,如:作为事件处理器,或作为参数传递给 (setTimeout,setInterval)这样的异步函数,或作为ajax发送请求,应用于请求各种状态的处理,我们可以称为异步回调,jQuery.Callbacks 为我们封装了一个回调对象模块,我们先来看一个应用场景: // 为什么jQuery中的ready事件可以执行多个回调,这得益于我们的jQuery.Deferred递延对象(是基于jQuery.Ca

J2EE学习篇之--JQuery技术详解

前面我们讲解了的J2EE的技术都是服务端的技术,下面我们来看一下前端的一些开发技术,这一篇我们来看一下jQuery技术 简介: jQuery由美国人John Resig创建,至今已吸引了来自世界各地的众多 javascript高手加入其team. jQuery是继prototype之后又一个优秀的Javascript框架.其宗旨是--WRITE LESS,DO MORE,写更少的代码,做更多的事情. 它是轻量级的js库(压缩后只有21k) ,这是其它的js库所不及的,它兼容CSS3,还兼容各种浏

jQuery.validator 详解二

前言:上一篇详细的介绍了jQuery.validator( 版本v1.13.0 )的验证规则,这一篇重点讲述它的源码结构,及如何来对元素进行验证,错误消息提示的内部实现 一.插件结构(组织方式) 在讲述如何对元素进行验证前有必要了解它的代码组织方式,请看代码(部分省略) var plugFn = function( $ ) { $.extend($.fn, { // 验证from表单 validate: function( options ) { // ... // 实例化$.validator

jquery validate 详解二

原文:http://blog.sina.com.cn/s/blog_608475eb0100h3h2.html 这里只是第二篇,前面的内容请参阅上一篇 五.常用方法及注意问题 1.用其他方式替代默认的SUBMIT 1 $().ready(function() { 2 $("#signupForm").validate({ 3 submitHandler:function(form){ 4 alert("submitted"); 5 form.submit(); 6