blear.classes.template

1Introduction

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输出

转义输出 {{"<这里有尖括号>"}}
渲染为 &lt;这里有尖括号&gt;

原样输出 {{="<这里有尖括号>"}}
渲染为 <这里有尖括号>

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

8Reference