JavaScript模板引擎Template.js使用详解

发布时间 - 2026-01-10 21:50:05    点击率:

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

1、特性

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

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

(5)、支持include语句

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

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

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

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

2、语法

(1)、使用

引用简洁语法的引擎版本,例如: <script src="dist/template.js"></script> 

(2)、表达式

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

(3)、输出表达式

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

(4)、条件表达式

{{if admin}} 
 <p>admin</p> 
{{else if code > 0}} 
 <p>master</p> 
{{else}} 
 <p>error!</p> 
{{/if}} 

(5)、遍历表达式

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

{{each list as value index}} 
 <li>{{index}} - {{value.user}}</li> 
{{/each}} 

亦可以被简写:

{{each list}} 
 <li>{{$index}} - {{$value.user}}</li> 
{{/each}} 

(6)、模板包含表达式

用于嵌入子模板。

{{include 'template_name'}} 

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

(7)、辅助方法

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

template.helper('dateFormat', function (date, format) { 
 // .. 
 return value; 
}); 

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

3、实例

<!DOCTYPE HTML> 
<html> 
<head> 
<meta charset="UTF-8"> 
<title>basic-demo</title> 
<script src="../dist/template.js"></script> 
</head> 
<body> 
<div id="content"></div> 
<script id="test" type="text/html"> 
{{if isAdmin}} 
<h1>{{title}}</h1> 
<ul> 
 {{each list as value i}} 
  <li>索引 {{i + 1}} :{{value}}</li> 
 {{/each}} 
</ul> 
{{/if}} 
</script> 
<script> 
var data = { 
 title: '基本例子', 
 isAdmin: true, 
 list: ['文艺', '博客', '摄影', '电影', '民谣', '旅行', '吉他'] 
}; 
var html = template('test', data); 
document.getElementById('content').innerHTML = html; 
</script> 
</body> 
</html>

 

<!DOCTYPE HTML> 
<html> 
<head> 
<meta charset="UTF-8"> 
<title>no escape-demo</title> 
<script src="../dist/template.js"></script> 
</head> 
 
<body> 
 <h1>不转义HTML</h1> 
 <div id="content"></div> 
 <script id="test" type="text/html"> 
 <p>不转义:{{#value}}</p> 
 <p>默认转义: {{value}}</p> 
 </script> 
 
 <script> 
 var data = { 
  value: '<span style="color:#F00">hello world!</span>' 
 }; 
 var html = template('test', data); 
 document.getElementById('content').innerHTML = html; 
 </script> 
</body> 
</html> 

<!DOCTYPE HTML> 
<html> 
<head> 
<meta charset="UTF-8"> 
<title>include-demo</title> 
<script src="../dist/template.js"></script> 
</head> 
 
<body> 
<div id="content"></div> 
<script id="test" type="text/html"> 
<h1>{{title}}</h1> 
{{include 'list'}} 
</script> 
<script id="list" type="text/html"> 
<ul> 
 {{each list as value i}} 
  <li>索引 {{i + 1}} :{{value}}</li> 
 {{/each}} 
</ul> 
</script> 
 
<script> 
var data = { 
 title: '嵌入子模板', 
 list: ['文艺', '博客', '摄影', '电影', '民谣', '旅行', '吉他'] 
}; 
var html = template('test', data); 
document.getElementById('content').innerHTML = html; 
</script> 
</body> 
</html> 

<!DOCTYPE HTML> 
<html> 
<head> 
<meta charset="UTF-8"> 
<title>helper-demo</title> 
<script src="../dist/template.js"></script> 
</head> 
 
<body> 
<h1>辅助方法</h1> 
<div id="content"></div> 
<script id="test" type="text/html"> 
{{time | dateFormat:'yyyy年 MM月 dd日 hh:mm:ss'}} 
</script> 
 
<script> 
/** 
 * 对日期进行格式化, 
 * @param date 要格式化的日期 
 * @param format 进行格式化的模式字符串 
 *  支持的模式字母有: 
 *  y:年, 
 *  M:年中的月份(1-12), 
 *  d:月份中的天(1-31), 
 *  h:小时(0-23), 
 *  m:分(0-59), 
 *  s:秒(0-59), 
 *  S:毫秒(0-999), 
 *  q:季度(1-4) 
 * @return String 
 * @author yanis.wang 
 * @see http://yaniswang.com/frontend/2013/02/16/dateformat-performance/ 
 */ 
template.helper('dateFormat', function (date, format) { 
 
 if (typeof date === "string") { 
  var mts = date.match(/(\/Date(\d+)\/)/); 
  if (mts && mts.length >= 3) { 
   date = parseInt(mts[2]); 
  } 
 } 
 date = new Date(date); 
 if (!date || date.toUTCString() == "Invalid Date") { 
  return ""; 
 } 
 
 var map = { 
  "M": date.getMonth() + 1, //月份 
  "d": date.getDate(), //日 
  "h": date.getHours(), //小时 
  "m": date.getMinutes(), //分 
  "s": date.getSeconds(), //秒 
  "q": Math.floor((date.getMonth() + 3) / 3), //季度 
  "S": date.getMilliseconds() //毫秒 
 }; 
  
 
 format = format.replace(/([yMdhmsqS])+/g, function(all, t){ 
  var v = map[t]; 
  if(v !== undefined){ 
   if(all.length > 1){ 
    v = '0' + v; 
    v = v.substr(v.length-2); 
   } 
   return v; 
  } 
  else if(t === 'y'){ 
   return (date.getFullYear() + '').substr(4 - all.length); 
  } 
  return all; 
 }); 
 return format; 
}); 
 
// -------- 
 
var data = { 
 time: 1408536771253, 
}; 
var html = template('test', data); 
document.getElementById('content').innerHTML = html; 
</script> 
</body> 
</html> 

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持。


# js  # 模板引擎  # template.js  # javascript轻量级模板引擎juicer使用指南  # 教你使用javascript简单写一个页面模板引擎  # laytpl 精致巧妙的JavaScript模板引擎  # 详解Javascript模板引擎mustache.js  # 探究Javascript模板引擎mustache.js使用方法  # 详解Js模板引擎(TrimPath)  # JavaScript模板引擎用法实例  # 常用的JavaScript模板引擎介绍  # 高性能JavaScript模板引擎实现原理详解  # JavaScript模板引擎原理与用法详解  # 只有 20 行的 JavaScript 模板引擎实例详解  # 遍历  # 亦可  # 可以用  # 博客  # 可在  # 可选  # 可将  # 用户可以  # 好用  # 则为  # 大家多多  # 年中  # 可以防止  # 性能测试  # 加载  # 上传  # 中含有  # list  # template 


相关栏目: 【 网站优化151355 】 【 网络推广146373 】 【 网络技术251813 】 【 AI营销90571


相关推荐: 如何在万网主机上快速搭建网站?  网站制作企业,网站的banner和导航栏是指什么?  Laravel如何从数据库删除数据_Laravel destroy和delete方法区别  如何用手机制作网站和网页,手机移动端的网站能制作成中英双语的吗?  大同网页,大同瑞慈医院官网?  使用PHP下载CSS文件中的所有图片【几行代码即可实现】  Laravel数据库迁移怎么用_Laravel Migration管理数据库结构的正确姿势  常州企业网站制作公司,全国继续教育网怎么登录?  JavaScript如何操作视频_媒体API怎么控制播放  如何在阿里云域名上完成建站全流程?  Laravel如何使用Passport实现OAuth2?(完整配置步骤)  Gemini怎么用新功能实时问答_Gemini实时问答使用【步骤】  如何快速完成中国万网建站详细流程?  制作无缝贴图网站有哪些,3dmax无缝贴图怎么调?  如何在橙子建站中快速调整背景颜色?  Edge浏览器怎么启用睡眠标签页_节省电脑内存占用优化技巧  如何用5美元大硬盘VPS安全高效搭建个人网站?  Laravel怎么集成Vue.js_Laravel Mix配置Vue开发环境  如何制作新型网站程序文件,新型止水鱼鳞网要拆除吗?  Win10如何卸载预装Edge扩展_Win10卸载Edge扩展教程【方法】  如何在服务器上配置二级域名建站?  重庆市网站制作公司,重庆招聘网站哪个好?  购物网站制作费用多少,开办网上购物网站,需要办理哪些手续?  利用vue写todolist单页应用  网站制作公司哪里好做,成都网站制作公司哪家做得比较好,更正规?  米侠浏览器网页背景异常怎么办 米侠显示修复  网易LOFTER官网链接 老福特网页版登录地址  Laravel怎么实现搜索高亮功能_Laravel结合Scout与Algolia全文检索【实战】  Laravel如何实现数据库事务?(DB Facade示例)  百度浏览器ai对话怎么关 百度浏览器ai聊天窗口隐藏  Laravel如何实现模型的全局作用域?(Global Scope示例)  laravel怎么用DB facade执行原生SQL查询_laravel DB facade原生SQL执行方法  html5如何实现懒加载图片_ intersectionobserver api用法【教程】  Laravel如何使用Telescope进行调试?(安装和使用教程)  PHP怎么接收前端传的文件路径_处理文件路径参数接收方法【汇总】  Windows10如何删除恢复分区_Win10 Diskpart命令强制删除分区  Laravel如何设置自定义的日志文件名_Laravel根据日期或用户ID生成动态日志【技巧】  如何在宝塔面板中创建新站点?  rsync同步时出现rsync: failed to set times on “xxxx”: Operation not permitted  如何在橙子建站上传落地页?操作指南详解  Laravel如何为API生成Swagger或OpenAPI文档  bootstrap日历插件datetimepicker使用方法  如何在IIS7上新建站点并设置安全权限?  Laravel如何实现用户密码重置功能?(完整流程代码)  如何生成腾讯云建站专用兑换码?  Linux系统命令中tree命令详解  Laravel如何使用Collections进行数据处理?(实用方法示例)  如何在 Python 中将列表项按字母顺序编号(a.、b.、c. …)  QQ浏览器网页版登录入口 个人中心在线进入  Laravel怎么为数据库表字段添加索引以优化查询