1Introduction
- description:字符串类型模板引擎
- author:ydr.me
- create:2018-04-17 12:38
- update:2018年04月19日19:01:45
- github:https://github.com/blearjs/blear.classes.template
2Example
Template 是一个字符串类型模板引擎。它有以下特点:
- 模板语法简练:记住
{{
、}}
、#
、/
、=
、\
几个符号就可以了 - 控制是否转义输出:
{{"<b>这样会转义尖括号</b>"}}
、{{="<b>这样不会转义尖括号</b>"}}
- 控制是否行内原文输出:
{{\行内原文输出}}
,渲染后为{{行内原文输出}}
- 控制是否块级原文输出:
{{#ignore}}这是一大块内容{{/ignore}}
,渲染后为这是一大块内容
精确的错误定位:可以将编译、渲染错误定位具体的文件名、模板行号、书写位置
4| 这只是党的十八大以来党和政府依法管网、猛药治疴的一个缩影。 5| “网络是把双刃剑,一定要严厉打击好好整治这些乱象”“支持整改... >> 6| ...网络空间天朗气清、生态良好,符合人民利益。{{na1me}} 7| 习近平总书记强调,我们要本着对社会负责、对人民负责的态度,依... 8| 党的十九大报告指出,加强互联网内容建设,建立网络综合治理体系... ReferenceError: na1me is not defined file: /~/examples/3.html
- 递归引用:可以无限 include 子模板
var Template = require('blear.classes.template');
var tpl = new Template('{{ data }}');
var html = tpl.render({
data: 'Hello'
});
// => "Hello"
3模板语法
3.1变量定义、赋值
{{#var abc = 123}}
{{#var abc = 456}}
3.2判断
{{#if exp}}
{{#else if exp}}
{{#else}}
{{/if}}
3.3循环
可以循环列表、对象。
{{#for index, item in list}}
{{/for}}
3.4取消编译
多个模板引擎语法相同时,需要输出原始语法,使用\
(反斜杠)进行行内取消编译操作。
{{\exp}} => {{exp}}
3.5忽略编译
如果是大块的内容需要原样输出,则可以使用ignore
语法。
{{#ignore}}
{{abc}}{{def}}
{{/ignore}}
渲染为
{{abc}}{{def}}
3.6输出
转义输出 {{"<这里有尖括号>"}}
渲染为 <这里有尖括号>
原样输出 {{="<这里有尖括号>"}}
渲染为 <这里有尖括号>
3.7过滤
使用单个过滤器(b)
{{a | b}}
使用单个过滤器(b) + 单个参数(c)
{{a | b: c}}
使用单个过滤器(b) + 多个参数(c、d)
{{a | b: c, d}}
使用单个过滤器(b、e) + 多个参数(c、d和f、g)
{{a | b: c, d | e: f, g}}
3.8引用
支持常量、变量引用,支持模板之间的递归引用。
常量引用
{{#include "./a/b/c.html"}}
变量引用
{{#include childTemplate}}
4Static
4.1.defaults
默认配置。
4.1.1.defaults.dirname
- 类型:
string
- 说明:当然渲染文件的所在目录,后续的 include 的绝对引用都相对于该目录
- 默认:
""
4.1.2.defaults.file
- 类型:
string
- 说明:当然渲染文件路径
- 默认:
""
4.1.3.defaults.cache
- 类型:
boolean
- 说明:是否缓存编译结果(对当前实例下的 include 模板)
- 默认:
true
4.1.4.defaults.error
- 类型:
boolean
- 说明:是否抛出错误,如果为 true 则
throw
错误,否则会以渲染结果输出出来 - 默认:
false
4.2.filter(name, filter)
自定义静态过滤器。
4.2.1name
- 类型:
String
- 说明:定义的静态过滤器名称,该过滤器可以在所有后续实例中使用
4.2.2filter
- 类型:
function
- 说明:过滤器名称
4.3.resolver
自定义路径处理器,主要用于 inlcude 语法中。默认规则:
/**
* 内置路径处理器,外部可以被重写
* @param name {string} 引用的名称
* @param options {object} 配置
* @param options.dirname {string} 所在的根目标
* @param options.parent {object} 父级文件路径
* @returns file {String} 处理之后的路径
*/
function resolver(name, options) {
// 。。。
}
- 如果
name
为绝对路径,则相对于根目录 - 如果
name
为相对路径,则相对于父级
4.4.loader
自定义文件加载器,主要用于 inlcude 语法中。 在实际场景中可以根据所在运行环境特殊处理,如在浏览器中,用 ajax 加载,在 node 端,则使用 fs 模块加载。 默认加载器为:
/**
* 内置加载器,外部可以被重写
* @param file {string} 路径,即 resolver 之后的路径
* @returns template {String} 模板内容
*/
function resolver(name, options) {
return '未配置文件加载器';
}
5new Template(template, [options])
5.1template
- 类型:
String
- 说明:模板字符串
5.2options
- 类型:
Object
- 说明:配置信息,参考
.defaults
6Prototype
6.1#filter(name, filter): this
自定义实例级别的过滤器,实例级别的过滤器优先级高于静态级别的过滤器,同名会覆盖。
6.1.1name
- 类型:
String
- 说明:定义的实例过滤器名称,该过滤器只可以在当前实例中使用
6.1.2filter
- 类型:
function
- 说明:过滤器名称
6.2#render([data]): html
根据数据渲染模板。
6.2.1data
- 类型:
Object
- 说明:渲染的数据
6.2.2html
- 类型:
String
- 说明:渲染之后的内容
7Dependencies
- blear.classes.class
- blear.utils.array
- blear.utils.collection
- blear.utils.function
- blear.utils.object
- blear.utils.path
- blear.utils.string
- blear.utils.typeis
8Reference
- JavaScript模板引擎原理,几行代码的事儿:www.cnblogs.com
- 性能卓越的 js 模板引擎:github.com
- 有哪些好用的前端模板引擎:www.zhihu.com