js-template-art【二】语法
参看地址
一、模板语法
1、变量使用与输出
- <% if (user) { %>
- <h2><%= user.name %></h2>
- <% } %>
- 或:
- {{if user}}
- <h2>{{user.name}}</h2>
- {{/if}}
art-template 同时支持 {{expression}}
简约语法与任意 JavaScript 表达式 <% expression %>
。
2、原始输出
- {{@value}}
- 或
- <%- value %>
原始输出语句不会对 HTML
内容进行转义
3、条件
- {{if value}} ... {{/if}}
- {{if v1}} ... {{else if v2}} ... {{/if}}
- 或
- <% if (value) { %> ... <% } %>
- <% if (value) { %> ... <% } else { %> ... <% } %>
4、循环
- {{each target}}
- {{$index}} {{$value}}
- {{/each}}
- 或
- <% for(var i = 0; i < target.length; i++){ %>
- <%= i %> <%= target[i] %>
- <% } %>
target
支持Array
与Object
的迭代,其默认值为$data 。target 一般是{data:数组}
$value
与$index
可以自定义:{{each target as val key}} 使用时可以不用$val直接val即可
5、变量
- {{set temp = data.sub.content}}
- 或
- <% var temp = data.sub.content; %>
6、模板继承
- {{extend './layout.art'}}
- {{block 'head'}} ... {{/block}}
- 或
- <% extend('./layout.art') %>
- <% block('head', function(){ %> ... <% }) %>
模板继承允许你构建一个包含你站点共同元素的基本模板“骨架”。
7、子模板
- {{include './header.art'}}
- {{include './header.art' data}}
- 或
- <% include('./header.art') %>
- <% include('./header.art', data) %>
include
第二个参数默认值为 $data
。
8、打印输出
- <% print(val, val2, val3) %>
9、过滤器
- // 向模板中导入全局变量
- template.defaults.imports.$dateFormat = function(date, format){/*[code..]*/};
- template.defaults.imports.$timestamp = function(value){return value * 1000};
因为 imports
定义的全局变量的优先级会比普通模板变量高,所以建议命名使用 $
前缀。
- {{date | $timestamp | $dateFormat 'yyyy-MM-dd hh:mm:ss'}}
- 或
- <%= $dateFormat($timestamp(date), 'yyyy-MM-dd hh:mm:ss') %>
{{value | filter}}
过滤器语法类似管道操作符,它的上一个输出作为下一个输入。
10、压缩html、js、css
- template.defaults.minimize = true;
art-template 的页面压缩功能是在编译阶段实现的,因此完全不影响渲染速度,并且能够加快网络传输速度。但也有一个限制,它不能正常处理未闭合的 HTML 标签,因此使用 include
语句载入模板片段的时候请小心。
请避免书写这样的模板:
- <body>
- 或:
- </body></html>
使用 模板继承 代替 include
可以避免这样的问题出现。
11、调试
设置 template.defaults.debug=true
后,它会设置如下选项:
- {
- "bail": false,
- "cache": false,
- "minimize": false,
- "compileDebug": true
- }
debug
默认配置:
- Node 环境 =
process.env.NODE_ENV !== 'production'
- 浏览器环境 =
false
12、全局变量
1)内置变量清单
$data
传入模板的数据{Object|array}
$imports
外部导入的所有变量,等同template.defaults.imports
{Object}
print
字符串输出函数{function}
include
子模板载入函数{function}
extend
模板继承模板导入函数{function}
block
模板块声明函数{function}
2)注入全局变量
- template.defaults.imports.$console = console;
- <% $console.log('hello world') %>
模板外部所有的变量都需要使用 template.defaults.imports
注入、并且要在模板编译之前进行声明才能使用。
13、配制语法规则
1)修改界定符
art-template 支持修改默认模板界定符 {{}}
与 <%%>
:
- // 原生语法的界定符规则
- template.defaults.rules[0].test = /<%(#?)((?:==|=#|[=-])?)([\w\W]*?)(-?)%>/;
- // art 语法的界定符规则
- template.defaults.rules[1].test = /{{\s*([@#]?)(\/?)([\w\W]*?)\s*}}/;
2)添加语法
从一个简单的例子说起,让模板引擎支持 ES6 ${name}
模板字符串的解析:
- template.defaults.rules.push({
- test: /\${([\w\W]*?)}/,
- use: function(match, code) {
- return {
- code: code,
- output: 'escape'
- }
- }
- });
其中 test
是匹配字符串正则,use
是匹配后的调用函数。关于 use
函数:
- 参数:一个参数为匹配到的字符串,其余的参数依次接收
test
正则的分组匹配内容 - 返回值:必须返回一个对象,包含
code
与output
两个字段:code
转换后的 JavaScript 语句output
描述code
的类型,可选值:'escape'
编码后进行输出'raw'
输出原始内容false
不输出任何内容
值得一提的是,语法规则对渲染速度没有影响,模板引擎编译器会帮你优化渲染性能。
js-template-art【二】语法的更多相关文章
- node.js学习(二)--Node.js控制台(REPL)&&Node.js的基础和语法
1.1.2 Node.js控制台(REPL) Node.js也有自己的虚拟的运行环境:REPL. 我们可以使用它来执行任何的Node.js或者javascript代码.还可以引入模块和使用文件系统. ...
- JavaScript模板引擎artTemplate.js——template()方法
template(id, data)方法: id:必传,渲染模板的id. data:可选,一个Object对象. return:传data—>渲染完成html代码:不传data—>一个渲染 ...
- JavaScript模板引擎artTemplate.js——template.helper()方法
上一篇文章我们已经讲到了helper()方法,但是上面的例子只是一个参数的写法,如果是多个参数,写法就另有区别了. <div id="user_info"></d ...
- JavaScript模板引擎artTemplate.js——template.compile()方法
template.compile(source, options) source:必传,渲染模板的内容. options:可选,通常不传.(其实是我还没研究明白) return:一个渲染函数. 示例如 ...
- 【高德地图API】从零开始学高德JS API(二)地图控件与插件——测距、圆形编辑器、鼠标工具、地图类型切换、鹰眼鱼骨
原文:[高德地图API]从零开始学高德JS API(二)地图控件与插件——测距.圆形编辑器.鼠标工具.地图类型切换.鹰眼鱼骨 摘要:无论是控件还是插件,都是在一级API接口的基础上,进行二次开发,封装 ...
- js 正则练习之语法高亮
原文:js 正则练习之语法高亮 学了几天正则,差不多该总结整理写成果了,之前就想写语法高亮匹配来着,不过水平不够,看着例子都不理解.今天就分析下 次碳酸钴 和 Barret Lee 语法高亮实现. 先 ...
- 针对单个 js 文件禁用 ESLint 语法校验
问题描述: 在 Vue-cli 创建的项目中,使用了 ESLint 规范代码的项目中 如何针对单个 js 文件禁用 ESLint 语法校验,但整个项目依然保留 ESLint 的校验规则? 解决方案: ...
- qrcode.js 动态生成二维码
用qrcode.js动态生成二维码图片非常简单,只需要引入qrcode.js即可使用,而且可以自定义图片大小.背景色等信息. 1.jsp代码---页面头部引入qrcode.js,jquery文件可选 ...
- node.js 初学(二)—— 搭建注册/登录服务器
node.js 初学(二)—— 搭建注册/登录服务器 理论上来说,代码实现在理论和实际上是一样的.但实际上来说,他们不是 做一个最简单的用户注册登录功能 1.接口定义: 注册:/user?act=re ...
- js生成简单二维码
js文件下载地址:https://download.csdn.net/download/weixin_38296752/10554485 一.引入qrcode.js文件 <script type ...
随机推荐
- 笔记:php有那几种错误提示和查错方法
php有哪几种错误提示 1.notice : 注意 2.waring : 警告 3.error : 错误 PHP中都有哪几种查错方法? 1.语法检查--php配置文件里,把错误显示选项都打开或者代码开 ...
- android webView不简单
手机屏幕大小非常伤程序猿 励志成为一名Javaproject师的我.真的被它伤到了,不仅由于webView的强大.并且这个内容适合各样屏幕大小问题. 想当年苹果project师嘲笑安卓project师 ...
- 用cocos2d 2.1制作一个过河小游戏(4): 游戏主逻辑BaseLayer设计
前段时间一直在忙.没有时间更新博客.今天还是抽点时间把最后一小部分游戏的实现放上来吧. BaseLayer.h: #import <GameKit/GameKit.h> #import & ...
- MVC源码
http://aspnetwebstack.codeplex.com/ MVC源码
- python2.0_s12_day14_jQuery详解
jquery的中文介绍文档:http://www.php100.com/manual/jquery/jQuery之基本选择器jQuery中提供的用于获取标签的方法都有哪些? jQuery提供的 &qu ...
- laravel 强大的关联模型
内容比较多,不总结了,直接看学院君的译文吧,已经写得很详细了 传送门:http://laravelacademy.org/post/6191.html PS1: laravel的关联模型并不是遍历一次 ...
- C 标准库 - <stdio.h>
一般地,在C语言或C++中,会把用来#include的文件的扩展名叫 .h,称其为头文件. #include文件的目的就是把多个编译单元(也就是c或者cpp文件)公用的内容,单独放在一个文件里减少整体 ...
- [SQL]躺着也中枪的datetime类型
写在前面 本来这个东西,我是不想在这里总结的,今天有初学者的朋友问我了,那就不得不说说了,你肯定也踩过这样的坑,没遇到,说明你运气好,编码习惯好.那还是言归正传吧.避免你中枪,还是扫一眼这篇文章吧. ...
- android基础---->音频和视频的使用
Android 在播放音频和视频方面也是做了相当不错的支持,它提供了一套较为完整的API,使得开发者可以很轻松地编写出一个简易的音频或视频播放器.今天我们开始android中音频和视频使用的学习. 目 ...
- jquery中的each
$.each(Array, function(i, value) { this; //this指向当前元素 i; ...