arttemplate是JavaScript模板引擎,使用时需引入其对应的js文件:

  • arttemplate.js 简洁语法版
  • arttemplate-native.js 原生语法版

arttemplate有两种语法格式(简洁语法和原生语法),本文记录简介语法的使用。

简单应用

准备工作:下载template.js
使用流程:type=”text/html”的script标签存放模板,js中准备数据并渲染

<!-- 引入简洁语法版js文件-->
<script type="text/javascript" src="arttemplate.js"></script><div id="content"></div>
<!-- 编写模板,此模板放在html页面中,模板也可放在js文件中 -->
<script id="contentTemplate" type="text/html"><h1>{{title}}</h1> <ul> {{each list}}<li>索引 {{$<span class="hljs-variable">index</span> + 1}}</span><span class="xml"><span class="javascript"> :</span></span><span class="hljs-expression">{{$value}}</li> {{/each}}</ul> </script>
<!-- 渲染模板 -->
<script type="text/javascript">var data = {// 准备模板中涉及的数据title: '标签',list: ['文艺', '博客', '摄影', '电影', '民谣', '旅行', '吉他']};var html = template('contentTemplate', data);// 调用template()方法将模板与数据结合进行渲染document.getElementById('content').innerHTML = html;// 将渲染结果写入div
</script>
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22

js文件提供的方法

template(id,data)

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

【注】

由于arttemplate的预编译功能,可突破浏览器限制,让前端模板拥有后端模板一样的同步“文件”加载能力:
一、按文件与目录组织模板

template('tpl/home/main', data);
  • 1

二、模板支持引入子模板

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

template.compile(source,options)

返回一个渲染函数,主要用于模板写在js中

<div id="content"></div>
<!-- 在javascript中存放模板并渲染 -->
<script type="text/javascript">var source = '<ul>' + '{{each list as value i}}' +  '<li>索引 {{i + 1}} :{{value}}</li>'+ '{{/each}}'+ '</ul>';var render = template.compile(source); // 返回一个渲染函数var data = {list : ['文艺', '博客', '摄影', '电影', '民谣', '旅行', '吉他']}var html = render(data);document.getElementById('content').innerHTML = html;
</script>
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16

template.render(source,options)

返回渲染结果

template.helper(name,callback)

添加辅助方法,即在模板中访问外部公用函数

<div id="content"></div>
<script id="testTemplate" type="text/html">{{time | dateFormat:'yyyy年 MM月 dd日 hh:mm:ss'}}
</script><script type="text/javascript">/** * 对日期进行格式化, * @param date 要格式化的日期 * @param format 进行格式化的模式字符串 * @return String */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;});var data = {time: (new Date).toString(),};var html = template('testTemplate', data);document.getElementById('content').innerHTML = html;
</script>
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37
  • 38
  • 39
  • 40
  • 41
  • 42
  • 43
  • 44
  • 45

template.config(name,value)

更改引擎的默认配置

模板编写语法

输出表达式

{{content}} <!--内容编码输出,编码可以防止数据中含有 HTML 字符串--><span style="color:#F00">hello world!</span>
{{#content}} <!--内容不编码输出--> hello word!
  • 1
  • 2
var data = {content: '<span style="color:#F00">hello world!</span>'
};
  • 1
  • 2
  • 3

条件表达式

{{if admin}}<p>admin</p>
{{else if code > 0}}<p>master</p>
{{else}}<p>error!</p>
{{/if}}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
var data = {admin:true
}
  • 1
  • 2
  • 3

遍历表达式

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

{{each list as value index}}<li>{{index}} - {{value.user}}</li>
{{/each}}
<!--或-->
{{each list}}<li>{{$<span class="hljs-variable">index</span>}}</span><span class="xml"> - </span><span class="hljs-expression">{{$value.user}}</li>
{{/each}}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7

嵌入子模板

{{include 'template_name'}} <!--子模板共享当前数据-->
{{include 'template_name' news_list}} <!--子模板指定新数据-->
  • 1
  • 2
                                            <link rel="stylesheet" href="http://csdnimg.cn/release/phoenix/production/markdown_views-0bc64ada25.css"></div>

arttemplate入门相关推荐

  1. art-template入门(九)之API

    API template(filename, content) 根据模板名渲染模板. 参数: {string} filename {Object,string} content 返回值: 如果 con ...

  2. art-template入门(八)之选项

    转载自  art-template选项 template.defaults // 模板名 filename: null,// 模板语法规则列表 rules: [nativeRule, artRule] ...

  3. art-template入门(七)之压缩页面

    转载自  art-template压缩页面 压缩页面 template.defaults.minimize art-template 内建的压缩器可以压缩 HTML.JS.CSS,它在编译阶段运行,因 ...

  4. art-template入门(六)之解析规则

    转载自  art-template解析规则 解析规则 template.defaults.rules art-template 可以自定义模板解析规则,默认配置了原始语法与标准语法. 修改界定符 // ...

  5. art-template入门(五)之模板变量

    转载自  art-template模板变量 模板变量 template.defaults.imports 模板通过 $imports 可以访问到模板外部的全局变量与导入的变量. 导入变量 templa ...

  6. art-template入门(四)之调试

    转载自  art-template调试 template.defaults.debug art-template 内建调试器,能够捕获到语法与运行错误,并且支持自定义的语法.在 NodeJS 中调试模 ...

  7. art-template入门(三)之语法

    转载自  art-template语法 语法 art-template 支持标准语法与原始语法.标准语法可以让模板易读写,而原始语法拥有强大的逻辑表达能力. 标准语法支持基本模板语法以及基本 Java ...

  8. art-template 入门(二)之安装

    转载自  art-template 安装 安装 Npm npm install art-template --save 在浏览器中实时编译 下载:lib/template-web.js(gzip: 6 ...

  9. art-template入门(一)之介绍

    转载自  art-template介绍 介绍 art-template 是一个简约.超快的模板引擎. 它采用作用域预声明的技术来优化模板渲染速度,从而获得接近 JavaScript 极限的运行性能,并 ...

最新文章

  1. BERT+CRF的损失函数的研究
  2. Transformer升级之路:二维位置的旋转式位置编码
  3. js判断url链接是否可访问(服务可连接,可用)
  4. springboot ServletContextListener接口
  5. 【渝粤教育】国家开放大学2018年春季 8618-22T燃气行业规范 参考试题
  6. 1t硬盘怎么分区最好_新买的固态硬盘该不该分区?分区后性能如何?真是后悔知道晚了!...
  7. 力软使用技巧-前端(index)
  8. 18650锂电池保护板接线图_锂电池保护板的原理介绍保护板的构成和主要作用
  9. 如何用python做动画_如何使用python制作简单的动画?
  10. 【操作系统】HRT任务和SRT任务(实时系统中的硬实时系统和软实时系统)
  11. Kent Beck : 领导的敏捷潮
  12. 男人就要对自己狠一点
  13. gdal调用capi处理乱码问题(c#)
  14. PHP 实现word在线预览
  15. Deepin java开发环境的搭建jdk8,tomcat9,maven3.3.9,nodejs,vue3+
  16. 当MySQL想恋爱,java和navicate抢着做媒婆 ------ java连接MySQL数据库 navicat for MySQL 连接
  17. 苹果手用计算机解锁手机密码,苹果手机密码忘了怎么解锁(解决方法大全)
  18. 中荣股份上市首日破发:市值相对蒸发约3亿元,黄焕然为实控人
  19. Android Studio使用Mob获取手机验证码
  20. 可怜的80后——最具牺牲精神的一代

热门文章

  1. JS实现网站的简体字与繁体字转换
  2. python数据处理——取dataframe的一列或一行
  3. python bitwise operator 位运算
  4. Xcode The 'Apple Push Notification' feature is only available to users enrolled in Apple Develo.
  5. c# Thread 线程详细讲解
  6. 宋朝名画“虎戴VR”,在外网火了
  7. NLP标注工具Brat的简单使用
  8. 【五六七人口普查】我国省市两级各行业门类人口及三次产业人口比重
  9. 果粉黑诞生记——兼谈文件夹隐喻
  10. iPhone 5 越狱安装8.4.1 与 6.1.4双系统教程