artTemplate模板
1、介绍
新一代 javascript 模板引擎。
2、性能(引)
1、性能卓越,执行速度通常是 Mustache 与 tmpl 的 20 多倍(性能测试)
2、支持运行时调试,可精确定位异常模板所在语句(演示)
3、对 NodeJS Express 友好支持
4、安全,默认对输出进行转义、在沙箱中运行编译后的代码(Node版本可以安全执行用户上传的模板)
5、支持include语句,可在浏览器端实现按路径加载模板
6、支持预编译,可将模板转换成为非常精简的 js 文件
7、模板语句简洁,无需前缀引用数据
8、支持所有流行的浏览器
3、方法介绍
template(id, data)
根据 id 渲染模板。内部会根据document.getElementById(id)查找模板。
如果没有 data 参数,那么将返回一渲染函数。
template.compile(source, options)
将返回一个渲染函数。
var render = template.compile(tpl);//tpl是模板
tpl代码如下
{{each data as value index}}
<tr>
<td>{{index+1}}</td>
<td>{{value.a1}}</td>
<td class="tooltip" rel="{{value.a2}}"><p>{{value.a3}}</p></td>
<td><a href="">{{value.a4}}</a></td>
<td><a href="">{{value.a5}}</a></td>
<td><a href="">{{value.a6}}</a></td>
<td>{{value.a7}}</td>
<td>{{value.a8}}</td>
<td><a href="javascript:;" class="block"><span dataId="{{value.a9}}" class="block del-practice"></span></a></td>
</tr>
{{/each}}
template.render(source, options)
将返回渲染结果。同上返回的template.compile(source, options)函数
代码如下
我们拿var render = template.compile(tpl);返回的函数render来生成html页面
如下:
$('#ID').html(render(result));//result为后端返回的json数据
template.helper(name, callback)
添加辅助方法。
例如:(转)
template.helper('dateFormat', function (date, format) {
date = new Date(date);
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;
});
如何使用?
如下:
{{time | dateFormat:'yyyy年 MM月 dd日 hh:mm:ss'}}//模板中这么使用 time是一个字符串 dateFormat函数名
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'}}
基础不再详述下面介绍模板语法与原生语法的使用例子
4、语法使用
基础语法
<ul>
{{each result as value index}}
{{if index <= 2}}
<li class="item-ranking clearfix firstList {{if index == result.length-1}}last{{/if}}">
<img class="fl head-portrait" src="{{value.picUrl}}" onerror="javascript:this.src='people-error.png';"></img>
<div class="zz_big"></div>
<div class="fl modify-num">
<p class="ranking-name">
<span class="ell student-name" title="{{value.name}}">{{value.name}}</span>
<span class="student">已练习 {{value.exerciseNum}}</span>
<div class="view-btn" data-id={{value.ID}} data-url="{{value.picUrl}}" data-num="{{index+1}}">查看</div>
</p>
</div>
</li>
{{else}}
<li class="item-ranking clearfix {{if index == result.length-1}}last{{/if}}">
<img class="fl head-portrait" src="{{value.picUrl}}" onerror="javascript:this.src='people-error.png';"></img>
<div class="zz_small"></div>
<div class="fl modify-num">
<p class="fl ranking-name">
<span class="ell student-name" title="{{value.name}}">{{value.name}}</span>
<span class="student">已练习 {{value.exerciseNum}}</span>
</p>
</div>
<div class="view-btn1 fl" data-id={{value.ID}} data-url="{{value.picUrl}}" data-num="{{index+1}}">查看</div>
</li>
{{/if}}
{{/each}}
</ul>
模板语法支持基础的判断 但是高级的功能,比如js原生的方法是不支持的,下面介绍原生语法例子
原生语法
<%for(var key=0;key<data.length;key++){%>
<tr<%if(/失败/.test(data[key].result)){%> class="redbg" <%}%>>
<td><%=(key+1)%></td>
<td><%=data[key].a1%></td>
<td><%=data[key].a2%></td>
<td><%=data[key].a3%></td>
<td><%=data[key].a4 %></td>
<td><%=data[key].a5%></td>
<td>
<%if(data[key].a5 == "测试失败"){%>
<!--<button type="button" class="block recheck btn" dataID="<%=data[key].piGaiTopicId%>">ssss</button>-->
<%}%><%else{%>
<%=data[key].mark%>
<%}%>
</td>
</tr>
<%}%>
原生语法支持js的方法的使用和判断,这在灵活使用上很方便,可读性稍差了点。
artTemplate模板的更多相关文章
- artTemplate模板引擎学习实战
在我的一篇关于智能搜索框异步加载数据的文章中,有博友给我留言,认为我手写字符串拼接效率过低,容易出错.在经过一段时间的摸索和学习之后,发现现在拼接字符串的方法都不在是自己去书写了,而是使用Javasc ...
- artTemplate模板引擎
artTemplate模板引擎 <li>索引 {{i + 1}} :{{value}}</li> {{/each}} </ul> </ ...
- 高性能前端 art-template 模板
官网: https://aui.github.io/art-template/zh-cn/index.html nodejs 服务器端使用 第一步: 引入 art-template 的包 npm in ...
- django的小操作,查询效率up, 引用art-template模板+djangorestframework
Part1: 提高查询效率newses = News.objects.select_related('category', 'author').get(id=1) # category和author字 ...
- thinkjs——art-template模板用法
前言: 概述之前先附上此正式版介绍地址:https://github.com/aui/artTemplate or http://www.jq22.com/jquery-info1097,可以再看下 ...
- ajax请求数据填充表格———使用art-template模板提高效率
一.为什么要用art-template模板 在实习的一次项目中,因为需求中展示表格的字段有很多个,后端返回的也是json数据,这时候如果还是使用之前的字符串拼接,这样会开发得比较慢,而且容易出错,而且 ...
- nodejs中引入art-template模板
使用Webstorm创建nodejs express应用时,默认使用的是jade或者ejs模板,对于不习惯这两种模板语法的人来说确实不是很方便.没关系,这里我们使用art-template模板引擎,使 ...
- koa art-template模板引擎的使用
art-template 模板引擎介绍 art-template 是一个简约.超快的模板引擎. 它采用作用域预声明的技术来优化模板渲染速度,从而获得接近 JavaScript 极限的运行 性能,并且同 ...
- Node学习之(第三章:art-template模板引擎的使用)
前言 大家之前都有使用过浏览器中js模板引擎,其实在Node.js中也可以使用模板引擎,最早使用模板引擎的概念是在服务端新起的. art-template art-template是一款高性能的Jav ...
- Express 中配置使用 art-template模板引擎
art-template 官网 https://aui.github.io/art-template/ 安装: npm install --save art-template npm install ...
随机推荐
- Git现实(一个)版本控制概述
从今天开始.我们了解的分布式版本控制系统Git相关内容.了解Git之前,我们的第一个版本控制系统,使宏观的描述. 什么是版本号控制 版本号控制是指通过对文件内容的变化进行记录,并为每次的变化进行编号, ...
- C代码分析器(一个 公开赛冠军)
最近心血来潮,我希望能写一个通用的代码分析工具(其实这个词有点太.事实上为C代码).看到这几天我看到代码头晕眼花,尽管Source Insight救命,仍然没有足够的智慧思考很多地方. 如今主要遇到的 ...
- unity3d 依据指定的Assets下的目录路径 返回这个路径下的全部文件名称
using UnityEngine; using System.Collections; using System.Collections.Generic; using System.IO; < ...
- (大数据工程师学习路径)第四步 SQL基础课程----SQL介绍及mysql的安装
一.数据库和SQL介绍 数据库(Database)是按照数据结构来组织.存储和管理数据的仓库,它的产生距今已有六十多年.随着信息技术和市场的发展,数据库变得无处不在:它在电子商务.银行系统等众多领域都 ...
- SQL_sql的简单查询
***********************************************声明*************************************************** ...
- Javascript学习1 - Javascript中的类型对象
原文:Javascript学习1 - Javascript中的类型对象 1.1关于Numbers对象. 常用的方法:number.toString() 不用具体介绍,把数字转换为字符串,相应的还有一个 ...
- 谈论Hibernate级联删除——JPA根据Hibernate实现许多级联删除CascadeType.DELETE_ORPHAN
声明: 1.这篇文章是原创.非复制或转载过来. 2.在本文中,参数都亲自做过实验证明. 3.这篇文章谈到了Hibernate配置基于注释的方法.hbm语法不可用. 不清JPA.Hibernate.EJ ...
- MyEclipse2014 设备 checkstyle、PMD、findbugs 最简单的方法 详细说明
最近的实验需要的代码审查和应用程序性能优化.在需求MyEclipse安装某些插件,由于如今的MyEclipse版本号和大多数教程的不一样了,一些安装选项也已经改变,所以安装起来非常费事,通过不断的尝试 ...
- [mysql]刷新windows恢复后mysql和"Access denied for user'root'@'IP'"处理问题
mysql数据库软件实际上是绿色的,重装系统后能够继续使用. 1.重装系统保留原有的后mysql安装文件夹,数据文件夹. 2.制作用于启动一个批处理文件mysql:[run.bat]的文件存储在mys ...
- HDU 1042 N! 參考代码
HDU 1042 N! 题意:给定整数N(0 ≤ N ≤ 10000), 求 N! (题目链接) #include <iostream> using namespace std; //每一 ...