特性

  1. 性能卓越,执行速度通常是 Mustache 与 tmpl 的 20 多倍(性能测试
  2. 支持运行时调试,可精确定位异常模板所在语句(演示
  3. 对 NodeJS Express 友好支持
  4. 安全,默认对输出进行转义、在沙箱中运行编译后的代码(Node版本可以安全执行用户上传的模板)
  5. 支持include语句
  6. 可在浏览器端实现按路径加载模板(详情
  7. 支持预编译,可将模板转换成为非常精简的 js 文件
  8. 模板语句简洁,无需前缀引用数据,有简洁版本与原生语法版本可选
  9. 支持所有流行的浏览器

编写模板

使用一个type="text/html"script标签存放模板:

<script id="test" type="text/html">
<h1>{{title}}</h1>
<ul>
{{each list as value i}}
<li>索引 {{i + 1}} :{{value}}</li>
{{/each}}
</ul>
</script>

渲染模板

var data = {
title: '标签',
list: ['文艺', '博客', '摄影', '电影', '民谣', '旅行', '吉他']
};
var html = template('test', data);
document.getElementById('content').innerHTML = html;

演示

模板语法

有两个版本的模板语法可以选择。

简洁语法

推荐使用,语法简单实用,利于读写。

{{if admin}}
{{include 'admin_content'}} {{each list}}
<div>{{$index}}. {{$value.user}}</div>
{{/each}}
{{/if}}

查看语法与演示

原生语法

<%if (admin){%>
<%include('admin_content')%> <%for (var i=0;i<list.length;i++) {%>
<div><%=i%>. <%=list[i].user%></div>
<%}%>
<%}%>

查看语法与演示

下载

方法

template(id, data)

根据 id 渲染模板。内部会根据document.getElementById(id)查找模板。

如果没有 data 参数,那么将返回一渲染函数。

template.compile(source, options)

将返回一个渲染函数。演示

template.render(source, options)

将返回渲染结果。

template.helper(name, callback)

添加辅助方法。

例如时间格式器:演示

template.config(name, value)

更改引擎的默认配置。

字段 类型 默认值 说明
openTag String '{{' 逻辑语法开始标签
closeTag String "}}" 逻辑语法结束标签
escape Boolean true 是否编码输出 HTML 字符
cache Boolean true 是否开启缓存(依赖 options 的 filename 字段)
compress Boolean false 是否压缩 HTML 多余空白字符

使用预编译

可突破浏览器限制,让前端模板拥有后端模板一样的同步“文件”加载能力:

一、按文件与目录组织模板

template('tpl/home/main', data)

二、模板支持引入子模板

{{include '../public/header'}}

基于预编译:

  • 可将模板转换成为非常精简的 js 文件(不依赖引擎)
  • 使用同步模板加载接口
  • 支持多种 js 模块输出:AMD、CMD、CommonJS
  • 支持作为 GruntJS 插件构建
  • 前端模板可共享给 NodeJS 执行
  • 自动压缩打包模板

预编译工具:TmodJS

NodeJS

安装

npm install art-template

使用

var template = require('art-template');
var data = {list: ["aui", "test"]}; var html = template(__dirname + '/index/main', data);

配置

NodeJS 版本新增了如下默认配置:

字段 类型 默认值 说明
base String '' 指定模板目录
extname String '.html' 指定模板后缀名
encoding String 'utf-8' 指定模板编码

配置base指定模板目录可以缩短模板的路径,并且能够避免include语句越级访问任意路径引发安全隐患,例如:

template.config('base', __dirname);
var html = template('index/main', data)

NodeJS + Express

var template = require('art-template');
template.config('base', '');
template.config('extname', '.html');
app.engine('.html', template.__express);
app.set('view engine', 'html');
//app.set('views', __dirname + '/views');

运行 demo:

node demo/node-template-express.js

若使用 js 原生语法作为模板语法,请改用 require('art-template/node/template-native.js')

所有演示例子 | 引擎原理

新一代 javascript 模板引擎:artTemplate-3.0的更多相关文章

  1. 新一代 javascript 模板引擎

    artTemplate-3.0 新一代 javascript 模板引擎 <!DOCTYPE html> <html lang="en"> <head& ...

  2. JavaScript模板引擎artTemplate.js——为什么使用模板引擎?

    作为一个工作一年的菜鸟,在公司做了几个外包项目,也接触到了不同形式的web开发.其实也没多少,就是javaweb开发和HTML5移动开发,这两者在页面展示的时候的解决方案还是有所不同的. 1.vo+e ...

  3. JavaScript模板引擎artTemplate.js——如何引入模板引擎?

    artTeamplate.js在github上的地址:artTemplate性能卓越的js模板引擎 引入模板引擎,就是引入外部javascript啦,并且artTemplate.js不依赖其他第三方库 ...

  4. JavaScript模板引擎artTemplate.js——结语

    再次首先感谢模板的作者大神,再次放出github的地址:artTemplate性能卓越的js模板引擎 然后感谢博客园的一位前辈,他写的handlebars.js模板引擎教程,对我提供了很大的帮助,也是 ...

  5. JavaScript模板引擎artTemplate.js——两种方法实现性别的判定

    template.helper(name, callback) name:必传,辅助事件的名称. callback:必传,辅助事件的回调函数. return:undefined 所谓的辅助事件,主要用 ...

  6. JavaScript模板引擎artTemplate.js——template()方法

    template(id, data)方法: id:必传,渲染模板的id. data:可选,一个Object对象. return:传data—>渲染完成html代码:不传data—>一个渲染 ...

  7. JavaScript模板引擎artTemplate.js——是否编码输出html字符

    template.config(name, value)方法用于更改引擎的默认配置. 其中字段escape,类型为boolean,默认为true. 首先,我们不修改配置信息输出一段带有html标签的字 ...

  8. JavaScript模板引擎artTemplate.js——引入子模板

    之前的例子都是单一结构的对象,如果遇到复杂对象结构,我们可以通过引入子模板来实现html的渲染. 依旧以之前的数据作为例子: <div id="content">< ...

  9. JavaScript模板引擎artTemplate.js——template.helper()方法

    上一篇文章我们已经讲到了helper()方法,但是上面的例子只是一个参数的写法,如果是多个参数,写法就另有区别了. <div id="user_info"></d ...

随机推荐

  1. 【数组】3Sum

    题目: Given an array S of n integers, are there elements a, b, c in S such that a + b + c = 0? Find al ...

  2. Java_反射机制详解

    本篇文章依旧采用小例子来说明,因为我始终觉的,案例驱动是最好的,要不然只看理论的话,看了也不懂,不过建议大家在看完文章之后,在回过头去看看理论,会有更好的理解. 下面开始正文. [案例1]通过一个对象 ...

  3. 原生js动态添加style,添加样式

    原生js动态添加style,添加样式 第一种 var style="[assign-url='"+str+"']{display:initial}"; var ...

  4. C++11中右值引用和移动语义

    目录 左值.右值.左值引用.右值引用 右值引用和统一引用 使用右值引用,避免深拷贝,优化程序性能 std::move()移动语义 std::forward()完美转发 容器中的emplace_back ...

  5. ASP .NET Core 基本知识点示例 目录

    ASP.NET Core 的 运行机制 文章 ASP.NET Core 中的 配置 文章 源代码 ASP.NET Core 中的 依赖注入 文章 源代码 ASP.NET Core 中的 日志 文章 源 ...

  6. Installing haproxy load balancing for http and https--转载

    This example will guide you through a simple IP based load balancing solution that handles ssl traff ...

  7. VF

    VF 描述 Vasya is the beginning mathematician. He decided to make an important contribution to the scie ...

  8. 阿里云提示ECS服务器存在漏洞处理方法

    1.阿里云提供生成修复命令,但是这个只提供给企业版,即收费的: 2.自己手动修复的话, 采用软件升级一般都可以解决.除了提示带kernel的高危漏洞的,其他的不需要重启实例即可修复. 有kernel的 ...

  9. Jquery ui draggable在chrome和ie7下的bug

    当页面足够长,向下滚动一些之后, 在拖动时,被拖动的div会向下产生滚动距离那么高(scrolltop)的差距 鼠标位置距div顶部差距了正好页面scroll的距离,页面scoll越多差的越多. 解决 ...

  10. jQuery二维码

    现在二维码很火,因为他可以很方便的贴到任何地方,只要扫一扫就可以看到二维码的内容 ok 废话少说,上代码 这个二维码基于jquery和jquery.qrcode插件 所以使用前先引入 <scri ...