TrimPath 模板引擎使用指南

开发 开发工具
macro 一般用来封装可复用 HTML 模板,类似函数的功能。对于每个模板来说 macro 是私用的。

[[180688]]

TrimPath 是一款轻量级的前端 JavaScript 模板引擎,语法类似 FreeMarker, Velocity,主要用于方便地渲染 json 数据

语法 Syntax

表达式 Expressions

表达式和修饰符(其它模板语言中叫做过滤器 filter)中间用 | 分割且 不能有空格

${expr} 
${expr|modifier} 
${expr|modifier1:arg1,arg2|modifier2:arg1,arg2|...|modifierN:arg1,arg2} 
  • 1.
  • 2.
  • 3.

语句 Statements

控制流 Control Flow

{if testExpr} 
    {elseif testExpr} 
    {else
{/if} 
  • 1.
  • 2.
  • 3.
  • 4.

循环 Loops

{for varName in listExpr} 
{/for
 
{for varName in listExpr} 
    ...循环主体... 
{forelse} 
    ...当 listExpr 是 null 或者 length 为 0 ... 
{/for
  • 1.
  • 2.
  • 3.
  • 4.
  • 5.
  • 6.
  • 7.
  • 8.

变量声明 Variable Declarations

变量声明语句用花括号 {} 括起来,不需要关闭。类似 JavaScript 中的赋值语句

{var varName} 
{var varName = varInitExpr} 
  • 1.
  • 2.

宏声明 Macro Declarations

{macro macroName(arg1, arg2, ...argN)} 
    ...macro 主体... 
{/macro} 
  • 1.
  • 2.
  • 3.

CDATA 部分 CDATA Text Sections

CDATA 部分用来告诉模板引擎不用做任何解析渲染,直接输出。比如展示一个模板字符串本身

{cdata} 
    ${customer.firstName} ${customer.lastName} 
{/cdata} 
  • 1.
  • 2.
  • 3.

In-line JavaScript

eval blocks 用来执行 JavaScript 代码片段

{eval}  
...模板渲染的时候执行的 JavaScript 代码...  
{/eval 
  • 1.
  • 2.
  • 3.

minify blocks 用来压缩内容中的换行符,比如压缩 HTML 属性

<div id="commentPanel" style="{minify} 
      display:none; 
      margin: 1em; 
      border: 1px solid #333; 
      background: #eee; 
      padding: 1em; 
    {/minify}"> 
  ... 
</div> 
  • 1.
  • 2.
  • 3.
  • 4.
  • 5.
  • 6.
  • 7.
  • 8.
  • 9.

修饰符 Modifier

修饰符用来处理上一个表达式的结果,并输出内容。类似于 Linux shell 中的 pipe 命名,可以串联

${name|capitalize} 
${name|default:"noname"|capitalize} 
  • 1.
  • 2.

内置修饰符

  • capitalize 返回大写内容
  • default:valueWhenNull 如果内容为 null,返回 valueWhenNull
  • eat 返回空内容,一般用于表达式求值后又不想展示输出的内容
  • escape 转换 HTML 字符实体,比如: & 转换成 &
  • h 和 escape 效果一样

自定义修饰符

算定义修饰符可以持载到 contextObject 上的 _MODIFIERS 属性上

var Modifiers = { toFixed: function(n, num) { return n.toFixed(num) } }  
var out = '{var nu = 12}${nu|toFixed:2}'.process({ _MODIFIERS: Modifiers }); 
  • 1.
  • 2.

宏 Macro

macro 一般用来封装可复用 HTML 模板,类似函数的功能。对于每个模板来说 macro 是私用的。如果想公用 macro,可以保存 macro 引用到 contextObject 上(下次调用 process() 方法的时候再手动挂载上!? )。需要在调用 process() 方法之前给 contextObject 设置一个空的 exported 属性:contextObject['exported'] = {}这个公用的 macro 设计的有点奇葩,可以参考这个 示例

{macro link(href, name)} 
    <a href="${href}">${name}</a> 
{/macro} 
 
${link('http://google.com''google')}      => <a href="http://google.com">google</a> 
${link('http://facebook.com''facebook')}  => <a href="http://facebook.com">facebook</a> 
  • 1.
  • 2.
  • 3.
  • 4.
  • 5.
  • 6.

示例

var data = { 
    name'iPhone 6 Plus'
    weight: 480, 
    ram: '16gb'
    networks: [ 
        '移动(TD-LTE)'
        '联通(TD-LTE)'
        '电信(FDD-LTE)' 
    ] 

 
data._MODIFIERS = { 
    toFixed: function(n, num) { 
        return n.toFixed(num) 
    } 

 
var template = '\ 
名称: ${name}<br>\ 
重量:${weight|toFixed:2}<br>\ 
内存:${ram|capitalize}<br>\ 
网络:\ 
{for item in networks}\ 
  {if item_index!=0}|{/if}\ 
  ${item}\ 
{/for}'; 
 
template.process(data) 
  • 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.

上面的代码输出:

名称: iPhone 6 Plus<br> 
重量:480.00<br> 
内存:16GB<br> 
网络: 
  移动(TD-LTE) 
 | 联通(TD-LTE) 
 | 电信(FDD-LTE) 
  • 1.
  • 2.
  • 3.
  • 4.
  • 5.
  • 6.
  • 7.

【本文是51CTO专栏作者周琪力的原创稿件,转载请注明出处】

戳这里,看该作者更多好文

责任编辑:武晓燕 来源: 51CTO专栏
相关推荐

2009-11-30 13:15:27

PHP模板Smarty

2022-09-29 09:07:08

DataGrip数据仓库数据库

2012-12-26 12:41:14

Android开发WebView

2011-07-21 14:57:34

jQuery Mobi

2010-09-06 14:24:28

ppp authent

2021-07-27 10:09:27

鸿蒙HarmonyOS应用

2009-12-28 17:40:10

WPF TextBox

2021-01-12 15:19:23

Kubernetes

2009-12-31 17:17:45

Silverlight

2010-08-05 15:40:21

FlexBuilder

2010-06-03 17:27:36

Hadoop命令

2010-08-04 15:37:31

Flex图表

2010-08-04 14:28:01

Flex组件

2024-02-04 00:00:00

Loki性能查询

2019-11-13 12:39:26

Python 开发编程语言

2022-06-23 08:01:36

FlaskSocketIOSwift

2020-10-19 11:49:32

NodeJavaScript

2014-05-16 11:09:38

Handlebars模板引擎

2010-02-06 16:30:25

C++内存对齐

2011-03-16 10:17:06

点赞
收藏

51CTO技术栈公众号