JavaScript中template模板引擎

template.js 一款 JavaScript 模板引擎,简单,好用。提供一套模板语法,用户可以写一个模板区块,每次根据传入的数据,生成对应数据产生的HTML片段,渲染不同的效果。

1、特性

(1)、性能卓越,执行速度通常是 Mustache 与 tmpl 的 20 多倍(性能测试)(2)、支持运行时调试,可精确定位异常模板所在语句(演示)

(3)、对 NodeJS Express 友好支持(4)、安全,默认对输出进行转义、在沙箱中运行编译后的代码(Node版本可以安全执行用户上传的模板)

(5)、支持include语句

(6)、可在浏览器端实现按路径加载模板(详情)

(7)、支持预编译,可将模板转换成为非常精简的 js 文件

(8)、模板语句简洁,无需前缀引用数据,有简洁版本与原生语法版本可选

(9)、支持所有流行的浏览器

2、语法

(1)、使用

引用简洁语法的引擎版本,例如:

(2)、表达式

{{ 与 }} 符号包裹起来的语句则为模板的逻辑表达式。

(3)、输出表达式

对内容编码输出: {{content}}
  不编码输出: {{#content}}
   编码可以防止数据中含有 HTML 字符串,避免引起 XSS 攻击。

(4)、条件表达式

1 {{if admin}}
2  <p>admin</p>
3 {{else if code > 0}}
4  <p>master</p>
5 {{else}}
6  <p>error!</p>
7 {{/if}}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7

(5)、遍历表达式

无论数组或者对象都可以用 each 进行遍历。

1 {{each list as value index}}
2  <li>{{index}} - {{value.user}}</li>
3 {{/each}}
  • 1
  • 2
  • 3

亦可以被简写:

1 {{each list}}
2  <li>{{$index}} - {{$value.user}}</li>
3 {{/each}}
  • 1
  • 2
  • 3

(6)、模板包含表达式

用于嵌入子模板。

1 {{include ‘template_name’}}

子模板默认共享当前数据,亦可以指定数据:{{include ‘template_name’ news_list}}

(7)、辅助方法

使用template.helper(name, callback)注册公用辅助方法:

1 template.helper(‘dateFormat‘, function (date, format) {
2  // ..
3  return value;
4 });
  • 1
  • 2
  • 3
  • 4

模板中使用的方式: {{time | dateFormat:’yyyy-MM-dd hh:mm:ss’}}
支持传入参数与嵌套使用: {{time | say:’cd’ | ubb | link}}

3、实例

 1 <!DOCTYPE HTML>
 2 <html>
 3 <head>
 4 <meta charset="UTF-8">
 5 <title>basic-demo</title>
 6 <script src="../dist/template.js"></script>
 7 </head>
 8 <body>
 9 <div id="content"></div>
10 <script id="test" type="text/html">
11 {{if isAdmin}}
12 <h1>{{title}}</h1>
13 <ul>
14  {{each list as value i}}
15   <li>索引 {{i + 1}} :{{value}}</li>
16  {{/each}}
17 </ul>
18 {{/if}}
19 </script>
20 <script>
21 var data = {
22  title: ‘基本例子‘,
23  isAdmin: true,
24  list: [‘文艺‘, ‘博客‘, ‘摄影‘, ‘电影‘, ‘民谣‘, ‘旅行‘, ‘吉他‘]
25 };
26 var html = template(‘test‘, data);
27 document.getElementById(‘content‘).innerHTML = html;
28 </script>
29 </body>
30 </html>
 1 <!DOCTYPE HTML>
 2 <html>
 3 <head>
 4 <meta charset="UTF-8">
 5 <title>no escape-demo</title>
 6 <script src="../dist/template.js"></script>
 7 </head>
 8
 9 <body>
10  <h1>不转义HTML</h1>
11  <div id="content"></div>
12  <script id="test" type="text/html">
13  <p>不转义:{{#value}}</p>
14  <p>默认转义: {{value}}</p>
15  </script>
16
17  <script>
18  var data = {
19   value: ‘<span style="color:#F00">hello world!</span>‘
20  };
21  var html = template(‘test‘, data);
22  document.getElementById(‘content‘).innerHTML = html;
23  </script>
24 </body>
25 </html>
 1 <!DOCTYPE HTML>
 2 <html>
 3 <head>
 4 <meta charset="UTF-8">
 5 <title>include-demo</title>
 6 <script src="../dist/template.js"></script>
 7 </head>
 8
 9 <body>
10 <div id="content"></div>
11 <script id="test" type="text/html">
12 <h1>{{title}}</h1>
13 {{include ‘list‘}}
14 </script>
15 <script id="list" type="text/html">
16 <ul>
17  {{each list as value i}}
18   <li>索引 {{i + 1}} :{{value}}</li>
19  {{/each}}
20 </ul>
21 </script>
22
23 <script>
24 var data = {
25  title: ‘嵌入子模板‘,
26  list: [‘文艺‘, ‘博客‘, ‘摄影‘, ‘电影‘, ‘民谣‘, ‘旅行‘, ‘吉他‘]
27 };
28 var html = template(‘test‘, data);
29 document.getElementById(‘content‘).innerHTML = html;
30 </script>
31 </body>
32 </html>
 1 <!DOCTYPE HTML>
 2 <html>
 3 <head>
 4 <meta charset="UTF-8">
 5 <title>helper-demo</title>
 6 <script src="../dist/template.js"></script>
 7 </head>
 8
 9 <body>
10 <h1>辅助方法</h1>
11 <div id="content"></div>
12 <script id="test" type="text/html">
13 {{time | dateFormat:‘yyyy年 MM月 dd日 hh:mm:ss‘}}
14 </script>
15
16 <script>
17 /**
18  * 对日期进行格式化,
19  * @param date 要格式化的日期
20  * @param format 进行格式化的模式字符串
21  *  支持的模式字母有:
22  *  y:年,
23  *  M:年中的月份(1-12),
24  *  d:月份中的天(1-31),
25  *  h:小时(0-23),
26  *  m:分(0-59),
27  *  s:秒(0-59),
28  *  S:毫秒(0-999),
29  *  q:季度(1-4)
30  * @return String
31  * @author yanis.wang
32  * @see http://yaniswang.com/frontend/2013/02/16/dateformat-performance/
33  */
34 template.helper(‘dateFormat‘, function (date, format) {
35
36  if (typeof date === "string") {
37   var mts = date.match(/(\/Date(\d+)\/)/);
38   if (mts && mts.length >= 3) {
39    date = parseInt(mts[2]);
40   }
41  }
42  date = new Date(date);
43  if (!date || date.toUTCString() == "Invalid Date") {
44   return "";
45  }
46
47  var map = {
48   "M": date.getMonth() + 1, //月份
49   "d": date.getDate(), //日
50   "h": date.getHours(), //小时
51   "m": date.getMinutes(), //分
52   "s": date.getSeconds(), //秒
53   "q": Math.floor((date.getMonth() + 3) / 3), //季度
54   "S": date.getMilliseconds() //毫秒
55  };
56
57
58  format = format.replace(/([yMdhmsqS])+/g, function(all, t){
59   var v = map[t];
60   if(v !== undefined){
61    if(all.length > 1){
62     v = ‘0‘ + v;
63     v = v.substr(v.length-2);
64    }
65    return v;
66   }
67   else if(t === ‘y‘){
68    return (date.getFullYear() + ‘‘).substr(4 - all.length);
69   }
70   return all;
71  });
72  return format;
73 });
74
75 // --------
76
77 var data = {
78  time: 1408536771253,
79 };
80 var html = template(‘test‘, data);
81 document.getElementById(‘content‘).innerHTML = html;
82 </script>
83 </body>
84 </html>

原文地址:https://www.cnblogs.com/login123/p/12180684.html

时间: 2024-10-11 05:53:49

JavaScript中template模板引擎的相关文章

Django基础,Day10 - template 模板引擎与路径设置

作为一个Web框架,Django需要一个方便的方式来生成动态的HTML.最常见的方法依赖于模板.模板包含所需的HTML输出的静态部分以及一些特殊的语法描述如何插入动态内容. Django框架后端默认支持自生内置的一套模板系统DTL(Django Template Language) 和 有名的Jinja2模板系统.当然,也可以从第三方模块中之前其他模板系统.如果没有特殊要求,建议使用Django自带的DTL模板系统,这也是django 1.8之前唯一可以的内置选项. TEMPLATE 默认配置

springboot中添加模板引擎freemarker和thymeleaf

freemarkder和thymeleaf都是java的模板引擎,这里只介绍这两种模板引擎如何在sprongboot中配置: 1. freemarkder 1.1 在pom.xml中添加依赖包 <!-- 集成freemarker --> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-freemarker</ar

nodejs学习(二) ---- express中使用模板引擎jade

系列教程,上一节教程  express+nodejs快速创建一个项目 在创建一个项目后,views目录下的文件后缀为 .jade . 打开 index.jade,具体内容如下图(忽略 header.jade 和 footer.jade,下面教程会一步步创建) 页面解析出的样子如下图.完全是html标签 一.jade 模板引擎 介绍 模板引擎是一个库,或者一个使用一定的规则或者语言来解释数据并渲染视图的框架.模板引擎处理过的最终结果是一个视图页面,也就是html页面或者用户图形界面GUI.在MVC

在Express中使用模板引擎

定义模板引擎 var app = express(); app.set('views', './views'); // 指定模板文件存放位置 app.set('view engine', 'jade') // 设置默认的模板引擎 注册指定扩展名的模板引擎: app.engine('jade', require('jade')._express ) 注意: _express函数是许多模板引擎提供的回调函数.但是这个函数只能在默认的文件扩展名上工作.但是,有种情况我们使用的不是对应模板引擎的扩展名的

flask中jinjia2模板引擎的使用详解3

接上文 模板继承 Jinji2中的模板继承是jinjia2比较强大的功能之一. 模板继承可以定义一个父级公共的模板,把同一类的模板框架定义出来共享. 这样做一方面可以提取共享代码,减少代码冗余和重复的工作量 另一方面,对于后期的维护和管理也非常方便. 一个根模板(或叫基模板)主要有三部分组成: 一是公共的js,css等资源文件的引用, 二是定义好一个布局框架, 三是定义子模板可以重写的部分(block) 下面我们以一个例子来说明模板继承的使用方法 1. 创建一个基模板 选中templates文件

PHP中面向对象中的模板引擎类

<?php /** * 模版引擎类 */ class Tpl { //缓存目录 protected $cacheDir = './Cache/'; //模版目录 protected $tplDir = './Tpl/'; //保存变量的成员方法 protected $vars = []; //缓存有效期 protected $cacheLifeTime = 3600; //初始化成员属性 public function __construct($tplDir = null ,$cacheDir 

Laravel中的模板引擎Blade

<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>模板继承@yield('title')</title> <style> .header{ width: 1000px; height:150px; margin: 0 auto; background: #f5f5f5; border: 1px

JavaScript使用Nodejs模板引擎EJS

HTML文件里加入下面一段代码(下载地址:http://www.embeddedjs.com/): <script type="text/javascript" src="ejs_production.js"></script> Syntax // load a template file, then render it with data html = new EJS({url: '/template.ejs'}).render(data)

ThinkPHP中处理模板引擎的volist标签

Volist标签主要用于在模板中循环输出数据集或者多维数组 必须得属性有:name属性,要输出的数据模板变量,id是循环变量. 其他属性参见开发手册. 通常模型的select方法返回的结果是一个二维数组,可以直接使用volist标签输出. 首先在对应得控制器中对其进行赋值 $Student=M('Student'); $list= $Student->select(); $this->$assgn('list',$list); 在模板中定义循环输出编号和姓名 <volist name=&