`
Josh_Persistence
  • 浏览: 1651654 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类

jQuery模板 :(二) JSRender之内置的模板标签

阅读更多

前言:

Jquery UI团队在决定废弃原有的模板解决方案tmpl后(http://josh-persistence.iteye.com/admin/blogs/1914231),Query Template插件的驱动力--Boris Moore--与jQuery UI团队一起,继续开发新的jQuery模板。在2011年10月,Moore发表了一篇博客(http://www.borismoore.com/ 2011/10/jquery-templates-and-jsviews-roadmap.html),更新了新插件工作进度的信息。在该博客中,他声明最终的解决方案将包含两个部分:

 

    (一)  JsRender模板,被称为"下一代jQuery模板",为高性能的、纯粹基于字符串的呈现做了优化,并且不依赖于DOM或jQuery。

 

     (二) JsViews模板,它是"交互性的数据驱动视图,构建于JsRender模板之上"。

 

一、什么是JsRender?

JsRender是一个简单、直观,强大、易扩展、轻量的最优UI模板。

换句话说,就是在Html文件中使用java script来输出html模板的内容。

 

二、附件是最新的jsrender.js和jsrender.min.js(2013/07/27),如果想下载最新的jsrender.js和jsrender.min.js,可以去官方文档下载:http://www.jsviews.com/#download

 

二、玩转JsRender

内置的模板标签(Built-in template tags)

 

1. {{: ...}}:用于输出"..."部分指定的数据,“...”部分是数据来源的路径或者是一个数据表达式,例如:{{:address.street}}

 

例子:

 

<!DOCTYPE html>

<html>
<head>
    <link href="http://www.jsviews.com/samples/resources/css/samples.css" rel="stylesheet"/>
    <script src="../jquery/jquery-2.0.3.js"></script>
    <script src="../jsrender/jsrender.js"></script>
</head>
<body>

<p><em><h2>1: Output Tag {{:...}}</h2></em></p>
<div id="result"></div>
<div id="result2"></div>

<script id="theTmpl" type="text/x-jsrender">
	<p> {{:name}} </p>

	<p>
		{{:name}}: lives in <b>{{:address.city}}</b>.<br />

		Here is <em>~root.address.city</em>: <b>{{:~root.address.city}}</b><br />

		Here is <em>~#data.address.city</em>: <b>{{:#data.address.city}}</b>
	</p>

</script>


<script id="theTmpl2" type="text/x-jsrender">
	<b>{{:#index+1}}:</b>
	{{:name}}: lives in <b>{{:address.city}}</b>.<br />

</script>

<script>

var data1 = {
	"name": "Josh",
   	"address": {
       "city": "Shanghai"
   	}	
}

var data2 = [
	{
    	"name": "Josh",
    	"address": {
        "city": "Shanghai"
    	}
  },
  {
    	"name": "Wangsheng",
    	"address": {
        "city": "BiJie"
    }
  }
];

var htmlOutput = $("#theTmpl").render(data1);
$("#result").html(htmlOutput);

var template = $.templates("#theTmpl2");
var htmlOutput2 = template.render(data2);

$("#result2").html(htmlOutput2);

</script>




</body>
</html>

 其中:在jsRender中,#xxx 表示当前view的 xxx 属性, - 所以 #index 就是view.index

 

{{:#index+1}}

 

 

运行的结果:




 

 2. {{>...}} 用于输出encoded的html。

 

 

<!DOCTYPE html>

<html>
<head>
    <link href="http://www.jsviews.com/samples/resources/css/samples.css" rel="stylesheet"/>
    <script src="../jquery/jquery-2.0.3.js"></script>
    <script src="../jsrender/jsrender.js"></script>
</head>
<body>

<div id="result"></div>

<script id="theTmpl" type="text/x-jsrender">
{{:description}}<br/>
{{>description}}
</script>

<script>
	var data = {
	  "description": "A <b>very nice</b> appartment"
	};
	
	var template = $.templates("#theTmpl");
	
	var htmlOutput = template.render(data);
	
	$("#result").html(htmlOutput);
</script>

</body>
</html>

 输出结果:

 

 

very nice appartment
A <b>very nice</b> appartment

 

3. {{include tmpl=... /}} 标签用于组合模板(template composition) -----用于在一个模板中引入另一个模板,并用上下文的数据来渲染template。

 

 

<!DOCTYPE html>

<html>
<head>
    <link href="http://www.jsviews.com/samples/resources/css/samples.css" rel="stylesheet"/>
    <script src="../jquery/jquery-2.0.3.js"></script>
    <script src="../jsrender/jsrender.js"></script>
</head>
<body>

<script id="peopleTemplate" type="text/x-jsrender">
  <div>
    {{:name}} lives in {{include tmpl="#addressTemplate"/}}
  </div>
</script>

<script id="addressTemplate" type="text/x-jsrender">
    <b>{{>address.city}}</b>
</script>

<div id="peopleList"></div>

<script>
	var people = [
	  {
	    "name": "Pete",
	    "address": {
	      "city": "Seattle"
	    }
	  },
	  {
	    "name": "Heidi",
	    "address": {
	      "city": "Sidney"
	    }
	  }
	];
	
	var html = $("#peopleTemplate").render(people);
	
	$("#peopleList").html(html);
</script>

</body>
</html>

 

输出结果:

Josh lives in Shanghai
WangSheng lives in GuiYang

 

4. {{for ...}}遍历数组和对象

    1) {{for ...}}遍历对象:

 

<!DOCTYPE html>

<html>
<head>
    <link href="http://www.jsviews.com/samples/resources/css/samples.css" rel="stylesheet"/>
    <script src="../jquery/jquery-2.0.3.js"></script>
    <script src="../jsrender/jsrender.js"></script>
</head>
<body>

<script id="peopleTemplate" type="text/x-jsrender">
  <div>
    {{:name}} lives in {{include tmpl="#addressTemplate"/}}
  </div>
</script>

<script id="addressTemplate" type="text/x-jsrender">
    <b>{{>address.city}}</b>
</script>

<div id="peopleList"></div>

<script>
var people = [
 {
   "name": "Josh",
   "address": {
     "city": "Shanghai"
   }
 },
 {
   "name": "WangSheng",
   "address": {
     "city": "GuiYang"
   }
 }
];
var html = $("#peopleTemplate").render(people);
$("#peopleList").html(html);
</script>

</body>
</html>

 

 

 

输出结果:

Josh lives in Shanghai
WangSheng lives in GuiYang

2) {{for...}} 遍历数组

 

<!DOCTYPE html>

<html>
<head>
    <link href="http://www.jsviews.com/samples/resources/css/samples.css" rel="stylesheet"/>
    <script src="../jquery/jquery-2.0.3.js"></script>
    <script src="../jsrender/jsrender.js"></script>
</head>
<body>

<div id="result"></div>

<script id="theTmpl" type="text/x-jsrender">
<b>{{:title}}</b>
<ul>
  {{for members}}
      <li>{{:name}} lives in <b>{{:address.city}}</b></li>
  {{/for}}
</ul>
</script>

<script>
var data = {
  "title": "The People:",
  "members": [
    {
      "name": "JoshWang",
      "address": {
        "city": "ShangHai"
      }
    },
    {
      "name": "WangSheng",
      "address": {
        "city": "GuiYang"
      }
    }
  ]
};

var template = $.templates("#theTmpl");

var htmlOutput = template.render(data);

$("#result").html(htmlOutput);
</script>

</body>
</html>

 

 

3)在{{for...}}与{{for...}}之间使用{{else...}}

 

 

<!DOCTYPE html>


<html>
<head>
    <link href="http://www.jsviews.com/samples/resources/css/samples.css" rel="stylesheet"/>
    <script src="../jquery/jquery-2.0.3.js"></script>
    <script src="../jsrender/jsrender.js"></script>
</head>
<body>

<div id="result"></div>

<script id="theTmpl" type="text/x-jsrender">
<b>{{:title}}</b>
{{for members}}
  <div>{{:name}}</div>
{{else}}
  <div>No members!</div>
{{/for}}

</script>

<script>
var data = {
  "title": "The A team",
  "members": []
};

var template = $.templates("#theTmpl");

var htmlOutput = template.render(data);

$("#result").html(htmlOutput);
</script>

</body>
</html>

 输出结果:

 

The A team

No members!
5.{{if ...}}用于渲染数据表达式为true时的模板. 一般用于如下几种情况:
1) {{if pathOrExpr}}...{{/if}} 用于渲染满足条件的内容。
2) {{if pathOrExpr tmpl=nameOrExpr /}}用于渲染外部包含的模板。

 3) {{if ...}}...{{else}}...{{/if}}

      {{if pathOrExpr}...{{else}}...{{/if}}

      {{if pathOrExpr1 tmpl=nameOrExpr1 }}{{else tmpl=nameOrExpr2 }}{{/if}}

 

 4) {{if ....}}...{{else ...}}...{{else}}...{{/if}}

     {{if pathOrExpr1}}...{{else pathOrExpr2}}...{{else}}...{{/if}

 

 

<!DOCTYPE html>

<html>
<head>
    <link href="http://www.jsviews.com/samples/resources/css/samples.css" rel="stylesheet"/>
    <script src="../jquery/jquery-2.0.3.js"></script>
    <script src="../jsrender/jsrender.js"></script>
</head>
<body>

<div id="result"></div>

<script id="theTmpl" type="text/x-jsrender">
<h4>{{:title}}</h4>
{{if members && members.length}}
  <ul>
    {{for members}}
      <li>{{:name}}</li>
    {{/for}}
  </ul>
{{else standby && standby.length}}
  Standby only:
  <ul>
    {{for standby}}
      <li>{{:name}}</li>
    {{/for}}
  </ul>
{{else}}
  No members!
{{/if}}
</script>

<script>
var data = [
  {
    "title": "The A team",
    "members": [
      {
        "name": "JoshWang"
      },
      {
        "name": "Micheal Shi"
      }
    ],
    "standby": [
      {
        "name": "Xavier"
      }
    ]
  },
  {
    "title": "The B team",
    "members": [],
    "standby": [
      {
        "name": "Dunk"
      },
      {
        "name": "Adriana"
      }
    ]
  },
  {
    "title": "The C team",
    "standby": []
  }
];

var template = $.templates("#theTmpl");

var htmlOutput = template.render(data);

$("#result").html(htmlOutput);
</script>

</body>
</html>

 

输出结果:

The A team

  • JoshWang
  • Micheal Shi

The B team

Standby only:

  • Dunk
  • Adriana

The C team

No members!

 

6. 前面提到的{{else ...}}, {{else ...}}标签可以用于{{if}},{{for}}或者是自定义标签。

1){{else}}用于{{if}}

{{if expression}}
    render this if the expression is true
{{else}}
    render this if the expression is false
{{/if}}

2){{else}}用于{{for}}

{{for members}}
    Member Name: {{:name}}
{{else}}
    There are currently no members...
{{/for}}

3){{else}}用于自定义标签:

{{tabs tabCaption="First Tab"}}
    first tab content
{{else tabCaption="Second Tab"}}
    second tab content
{{/tabs}}

 

7. 注释标签:{{!-- ... --}}

注:JsRender的注释标签和HTML的注释标签是相对的。你可以在JsRender的代码块中包含如下的代码:

<!-- This is an HTML comment -->

但是这个标签不会被JsRender或者是JsViews忽略掉,会包含在渲染的输出中。

 

 

 

  • 大小: 7 KB
2
0
分享到:
评论

相关推荐

    JsRender.zip(jsrender.js和jsrender.min.js合集)

    5. **与jQuery集成**:虽然JsRender可以独立使用,但它与jQuery有很好的集成,可以方便地与jQuery插件和方法一起使用。 6. **递归模板**:JsRender 支持递归模板,这意味着可以在模板中嵌套使用同一个模板,这对于...

    jsrender.js

    JSRender的核心理念是使模板编写变得简单,易于理解和维护,同时提供丰富的功能,如数据绑定、条件语句、循环结构和自定义标签。 **1. JSRender的基本语法** JSRender的模板语法以`{{`和`}}`作为标记,用于包裹...

    一个jQuery插件用于数据绑定的HTMLRender模板引擎

    HTMLRender是一款基于jQuery的数据绑定模板引擎,主要用于帮助开发者在JavaScript中高效地进行DOM操作和数据渲染。这款插件是jQuery的一个扩展,它提供了一种简洁的语法来将数据与HTML结构进行绑定,使得动态生成和...

    基于bootstrap和jquery的可拖拽移动div,可预览的页面生成器

    标签中的“jquery-ui”表明这个工具可能还整合了jQuery UI库,它是jQuery的一个扩展,提供了更多高级的交互控件和特效,如日期选择器、对话框、排序列表等。jQuery UI的使用进一步丰富了页面生成器的功能,使得用户...

    mini_clndr:迷你日历,用于使用下划线js,jquery和clndr.js显示事件

    在本文中,我们将深入探讨如何使用下划线JS(Underscore.js)、jQuery以及clndr.js库来创建一个这样的迷你日历。这三种技术结合,可以为用户提供一个直观且易于操作的日历组件。 首先,让我们了解一下这三个关键...

    backbone-viewj:无需 jQuery 的主干视图

    6. **模板引擎**:虽然不内置任何模板引擎,但可以方便地集成 Handlebars, Mustache 或其他模板库,实现动态数据绑定。 **使用步骤:** 1. **安装**:可以通过npm或直接下载源码,将其引入到项目中。 2. **创建...

    SourceAnalysis_BackboneJS:Backbone.js原始解析-源码解析

    5. **模板引擎集成**:Backbone本身不包含内置的模板引擎,但推荐使用如Underscore或Lo-Dash的模板功能。`Backbone.View`的`render`方法常用于更新视图,通常涉及模板渲染。 学习Backbone.js的源码能让我们更好地...

    First Backbone.js

    **Backbone.js 入门详解** Backbone.js 是一个轻量级的JavaScript库,它为构建复杂的、数据...在实践中不断探索,你会发现Backbone.js的强大之处在于它提供的结构和模块化,使得大型项目的维护和扩展变得更为轻松。

    BackBone图书源码.rar

    8. **轻量级**:BackBone自身只提供基础框架,不捆绑任何特定的DOM操作库或模板引擎,开发者可以根据需要选择Underscore.js、jQuery等库配合使用。 通过这个"BackBone图书源码",你可以深入理解这些概念,看到它们...

    asp.net验证提示美化效果

    7. **使用第三方库**:像Validator.js、 parsley.js 或其他类似的JavaScript库可以提供更丰富的验证效果和自定义选项。 总的来说,ASP.NET验证提示的美化是一个涉及前端设计和后端逻辑的过程。通过对验证控件样式...

    .net分页用户控件(js+c#)

    在.NET 2.0中,我们可以使用ASP.NET内置的GridView、DataList或Repeater控件的Paging属性来实现简单的分页。但为了实现更定制化的分页功能,我们通常会创建自定义的用户控件。 创建用户控件(UserControl): 1. 在...

    layui自定义工具栏的方法

    ~/Contents/js/jquery-3.3.1.min.js"&gt; ~/Contents/assets/layui/layui.all.js"&gt; ``` 然后,通过layui的`table`模块来渲染表格,并配置`toolbar`参数: ```javascript layui.use('table', function () { var table...

    Flask-Player:flkas中的音乐播放器

    4. **音频库**: Flask-Player可能依赖于像jQuery或Vue.js这样的JavaScript库,以及专门处理音频的库,如Howler.js或Audio.js,来实现音频播放控制。 5. **配置与设置**: 开发者可以通过配置Flask-Player的设置来...

    fullcalendar:这是MC4的自定义全日历模块

    &lt;script src="path/to/jquery.min.js"&gt; &lt;script src="path/to/fullcalendar.min.js"&gt; &lt;div id="calendar"&gt;&lt;/div&gt; document.addEventListener('DOMContentLoaded', function() { var calendarEl = document...

    庖丁解牛 纵向切入ASP.NET 3.5控件和组件开发 part1

    注意:由于文件大小为111MB,但本人的上传权限只有60MB,所以分开两部分压缩上传。解压前必须与part2一起解压。...附录a .net 3.5技术教程系列——collection/asp.net ajax/ silverlight/jquery ...646

    庖丁解牛 纵向切入ASP.NET 3.5控件和组件开发 part2

    注意:由于文件大小为111MB,但本人的上传权限只有60MB,所以分开两部分压缩上传。解压前必须与part2一起解压。...附录a .net 3.5技术教程系列——collection/asp.net ajax/ silverlight/jquery ...646

    laravel框架学习记录之表单操作详解

    Laravel内置了分页功能,通过在控制器中使用`paginate`方法分页查询数据,然后在视图中使用`$students-&gt;render()`渲染分页链接。 6. 表单验证: laravel提供`validate`方法来验证表单数据。例如,当用户通过POST...

    快速了解Python开发中的cookie及简单代码示例

    &lt;script src="/static/jquery-3.2.1.min.js"&gt; 用户名"&gt; 密码"&gt; 提交"&gt; ``` 接下来,编写登录视图函数: ```python from django.shortcuts import render, redirect def login(request): if request....

    Flask:使用Flask用HTML渲染csv文件

    根据实际需求,你可以进一步扩展此功能,例如添加数据过滤、排序或使用JavaScript库如jQuery或Plotly.js进行更复杂的数据可视化。 在实际项目中,确保CSV文件路径正确,且文件与`app.py`在同一目录下。如果CSV文件...

Global site tag (gtag.js) - Google Analytics