artTemplate教程

官方文档

一个简单的例子

<!DOCTYPE html>
<html lang="zh">
<head>
<meta charset="UTF-8">
<title>demo</title>
</head>
<body>
<script id="test" type="text/html">
<h1><%=title%></h1>
<ul>
<%
if(typeof list!='undefined'){
for(var i=0;i<list.length;i++){
%>
<li>索引 <%=i + 1%> :<%=list[i]%></li>
<%> }
}
%>
</ul>
</script> <div id="content"></div> <script type="text/javascript" src="js/template-native.js"></script> <script type="text/javascript">
var data = {
title: '标签',
list: ['a','b','c']
};
//根据id编译模板在进行渲染
var html = template('test',data);
//打印渲染结果
console.log(html);
//填充渲染结果到content
document.getElementById('content').innerHTML = html;
</script>
</body>
</html>

API列表

  • template(id, data)

    根据 id 渲染模板。内部会根据document.getElementById(id)查找模板。如果没有 data 参数,那么将返回一个渲染函数。

  • template.compile(source, options)

    可以直接在js中使用字符串作为模板内容进行编译,之后将返回一个渲染函数。options参数猜想应该是局部配置

  • template.render(source, options)

    如果直接使用和compile一样起编译作用,一般不直接使用,编译后返回的就是这个函数。渲染编译后的模板并返回结果。options参数猜想应该是局部配置

  • template.helper(name, callback)

    添加辅助方法,作用于模板中。name方法名,callback回调函数

    演示:

      //js代码中声明一个辅助函数
    template.helper('hi', function(name,age){
    console.log('你好! 我叫'+name);
    console.log('我今年'+age+'岁');
    //注意最后一定要返回一个结果给视图,否则这函数就没多大意义了
    return 'result';
    })

    辅助函数声明后模板中就可以进行调用了

    原生语法如下:

      <%=hi('高同学',23)%>

    如果辅助函数有多个参数:

      <%=hi('高同学',23,'value1','value2'..)%>

    参数顺序按书写顺序,<%%>是执行脚本语句<%=%>是输出脚步执行结果

    简洁语法如下:

      {{value |hi:23}}

    如果辅助函数有多个参数:

      {{value | hi:'value1','value2'..)}}

    参数顺序value是第一个参数,value1是第二个参数,value2是第三个参数..

    更多简洁语法的格式规范,请参考官方文档

  • template.config(name, value)

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

精简语法和原生语法比较:

  • 精简语法:表达不直观,不利于阅读,但兼容jsp页面

  • 原生语法:表达直观,利于阅读,但不兼容jsp页面


身为一个java程序员我肯定使用精简语法,故这里主要描述下精简语法:

使用

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

    <script src="dist/template.js"></script>

下载

表达式

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

输出表达式

对内容编码输出:

    {{content}}

不编码输出:

    {{#content}}

编码输出可以防止数据中含有 HTML 字符串(数据原样输出),避免引起 XSS 攻击。不编码输出含有html标签的元素将被浏览器解析为html元素

条件表达式

    {{if admin}}
<p>admin</p>
{{else if code > 0}}
<p>master</p>
{{else}}
<p>error!</p>
{{/if}}
//可以任意使用js关键字
<ul>
{{if typeof list!='undefined'}}
{{each list}}
<li>索引 {{$index}}. {{$value}}</li>
{{/each}}
{{/if}}
</ul>

遍历表达式

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

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

亦可以被简写:

    //$index表示数组下标,$value表示数组当前成员
{{each list}}
<li>{{$index}} - {{$value.user}}</li>
{{/each}}

模板包含表达式-若无note.js和TmodJS的支持仅限页面内的模板

用于嵌入子模板。

    {{include 'template_name'}}

子模板默认共享当前传入模板的数据,也可以为子模板指定接收的数据:

    {{include 'template_name' news_list}}

辅助方法

使用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}}

精简语法的调用辅助方法作者这样设计不知道在什么场景下有用:

原以为辅助方法say执行完毕会把结果传递给下一个方法执行,但并不是这样

并且这样的调用使用必须在开始指定一个数据名并把数据作为辅助函数的第一个参数,而辅助函数:后面开始的作为第二个参数依次来推

通过查询百度

貌似提供有这种方式,但不知官方为何没有说明

    {{say(time)}}

这种方式更直观更简洁,不是吗


以下部分需要note.js和TmodJS的支持,感兴趣可以参考官方文档

按文件与目录组织模板

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

模板支持引入子模板

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


artTemplate教程的更多相关文章

  1. Node入门教程(13)第十一章:mocha单元测试+should断言库+istanbul覆盖率测试+art-template

    声明:以下为老马的全栈视频教程的笔记,如果需要了解详情,请直接配合视频学习.视频全部免费,视频地址:https://ke.qq.com/course/294595?tuin=1eb4a0a4 node ...

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

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

  3. 【JavaScript】ArtTemplate个人的使用体验。

    据说ArtTemplate是腾讯的,感觉这东西真不错,使用方便,用起来很简单,哈哈.腾讯也不完全只是坑爹啊. ArtTemplate 使用是,正常引入js,这个自然不用说.这东西啥时候使用呢?我觉得这 ...

  4. github上最全的资源教程-前端涉及的所有知识体系

    前面分享了前端入门资源汇总,今天分享下前端所有的知识体系. 个人站长对个人综合素质要求还是比较高的,要想打造多拉斯自媒体网站,不花点心血是很难成功的,学习前端是必不可少的一个环节, 当然你不一定要成为 ...

  5. IndexedDB 教程

    IndexedDB 教程 IndexedDB 是一个基于 JavaScript 的面向对象的事务型数据库.有了 LocalStorage 和 Cookies,为什么还要推出 indexedDB 呢?其 ...

  6. github上最全的资源教程-前端涉及的所有知识体系【转】

    github上最全的资源教程-前端涉及的所有知识体系[转自:蓝猫的博客] 综合类 综合类 地址 前端知识体系 http://www.cnblogs.com/sb19871023/p/3894452.h ...

  7. 终极教程【zhong】

    just for a better future! 资源教程               aiim                   综合类 前端知识体系 前端知识结构 Web前端开发大系概览 We ...

  8. Angular2入门系列教程7-HTTP(一)-使用Angular2自带的http进行网络请求

    上一篇:Angular2入门系列教程6-路由(二)-使用多层级路由并在在路由中传递复杂参数 感觉这篇不是很好写,因为涉及到网络请求,如果采用真实的网络请求,这个例子大家拿到手估计还要自己写一个web ...

  9. Angular2入门系列教程6-路由(二)-使用多层级路由并在在路由中传递复杂参数

    上一篇:Angular2入门系列教程5-路由(一)-使用简单的路由并在在路由中传递参数 之前介绍了简单的路由以及传参,这篇文章我们将要学习复杂一些的路由以及传递其他附加参数.一个好的路由系统可以使我们 ...

随机推荐

  1. php 多语言(UTF-8编码)导出Excel、CSV乱码解决办法之导出UTF-8编码的Excel、CSV

    新项目,大概情况是这样的:可能存在多国.不同语种使用者,比喻有中文.繁体中文,韩文.日本等等,开发时选择了UTF-8编码,开发顺利,没有问题.昨天做了一个csv导出功能,导出的东西完全乱了: 设置mb ...

  2. asp:FileUpload 控件上传多文件

    <asp:FileUpload runat="server" ID="imgUpload" AllowMultiple="true" ...

  3. void类型指针的基本用法

    void作为指针时可以用任意类型的的指针值都可以给它进行赋值和传递,但是输出时必须时显性输出 代码如下: #include<cstdio> #include<iostream> ...

  4. 神奇的操作--O(1)快速乘

    从同机房大佬那里听来的... 用O(1)时间求出两个相乘超过long long的数的取摸的结果 神奇的操作... inline long long multi(long long x,long lon ...

  5. BeautifulSoup4模块的使用

    1. 安装 pip3 install beautifulsoup42. 使用 from bs4 import BeautifulSoup obj = BeautifulSoup("HTML内 ...

  6. django 母版与继承

    在子页面的页面最上方使用下面的语法来继承母版. {% extends 'layouts.html' %} 块: 通过在母版中使用{% block xxx %}来定义块.在子页面中通过定义母版中的blo ...

  7. php rtrim的一个坑,很“二”的问题

    一.背景: 做项目的时候遇到一种情况,商家的营业时间显示的问题,设计图上要求显示成:“星期一,星期二,星期三,星期四,星期五,星期六,星期天” 换句话说,就是营业星期勾哪个就显示哪个,类似下面这样: ...

  8. Murano Weekly Meeting 2015.09.08

    Meeting time: 2015.September.8th 1:00~2:00 Chairperson:  Serg Melikyan, PTL from Mirantis Meeting su ...

  9. (转)shell脚本输出带颜色字体

    shell脚本输出带颜色字体 原文:http://blog.csdn.net/andylauren/article/details/60873400 输出特效格式控制:\033[0m  关闭所有属性  ...

  10. pat1052. Linked List Sorting (25)

    1052. Linked List Sorting (25) 时间限制 400 ms 内存限制 65536 kB 代码长度限制 16000 B 判题程序 Standard 作者 CHEN, Yue A ...