简介

创建搜索最快和简洁的JavaScript模板函数,强调V8和nodejs下的性能,它在nodejs和浏览器上都显示了很好的性能。

dot.js速度快,体积小,没有依赖关系,源js代码只有140行

特性

无依赖

极其快速

自定义定界符 (custom delimiters)

运行时求值 (runtime evaluation)

运行时插值 (runtime interpolation)

编译时求值 (compile-time evaluation)

支持局部模板

支持条件语句

数组迭代器

编码

控制空白字符 - 全去或保留

流媒体友好

轻逻辑或者重逻辑,由你决定

doT.js详细使用介绍

安装方法

用于浏览器引入

javascript 文件:

自代码中使用

用于 Node.js

如果你打算在 Node.js 中使用 doT,可以通过 npm 安装 doT

npm install dot

在代码中使用require('dot')

调用方式

doT渲染模板分为2个阶段,这一点从它的使用方法中也能看出来:

//1. 编译模板函数

var tempFn = doT.template("

Here is a sample template {{=it.foo}}

");//2. 渲染模板函数

var resultText = tempFn({foo: 'with doT'});

这一点是与其他主流的模板引擎不同的。 在compile阶段,可以依赖其他模板文件,缓存模板等操作。还可以传入参数,通过条件判断生成模板内容。 在页面载入或是服务器启动时,根据一些环境变量或其他条件预先编译模板,可以进

一步提高模板渲染是的效率。

doT.template方法的第2个参数为配置项,第3个参数为编译时可接收的参数,参数在模板中被默认存储在def对象下,具体用法在{{#}}语法中介绍。

doT.template方法返回值为function类型:tempFn,tempFn接收的参数是模板渲染时可传入的数据(与前面编译时的数据不是同一份数据)。该数据在模板中被默认存储在it对象下具体用法在{{}}和{{=}}等语法中都会介绍。

doT.templateSettings - 默认编译设置

可以通过改变编译设置自定义 doT。这是默认设置:

doT.templateSettings ={

evaluate:/\{\{([\s\S]+?)\}\}/g,

interpolate:/\{\{=([\s\S]+?)\}\}/g,

encode:/\{\{!([\s\S]+?)\}\}/g,

use:/\{\{#([\s\S]+?)\}\}/g,

define:/\{\{##\s*([\w\.$]+)\s*(\:|=)([\s\S]+?)#\}\}/g,

conditional:/\{\{\?(\?)?\s*([\s\S]*?)\s*\}\}/g,

iterate:/\{\{~\s*(?:\}\}|([\s\S]+?)\s*\:\s*([\w$]+)\s*(?:\:\s*([\w$]+))?\s*\}\})/g,

varname:'it',

strip:true,

append:true,

selfcontained:false};

如果你想用自己的定界符,可以修改 doT.templateSettings 中的正则表达式。

这是默认的定界符列表:

{{= }} 用于插值

{{ }} 用于求值

{{~ }} 数组迭代

{{? }} 条件语句

{{! }} 用于编码求值

{{# }} 用于编译时求值/引入和局部模板

{{## #}} 用于编译时定义

其他说明

varname : 模板数据引用变量名

默认情况,模板中的数据必须用 'it' 作为引用。修改设置中的 'varname',可以改变默认的变量名。 例如,你可以把 'varname' 设置成 "foo, bar",就可以传2个数据实例,通过 foo 和 bar 与模板建立关联。

strip : 控制空白字符, true:全部去掉空格; false:保留空格

append : 性能优化设置

通过它调整性能,根据使用的 javascript 引擎和模板的大小,append 设置成 false,可能会产生更好的效果。

selfcontained:依赖设置

如果 'selfcontained' 为 true,doT 将毫无依赖的产生函数。通常,doT 都是无依赖的,除非用到编码时,encodeHTML 会被加入。 如果 'selfcontained' 为 true,模板需要编码,encodeHTML 方法将被引入生成模板的函数中。

doT.template - 模板编译函数

调用此函数把你的模板编译成一个方法。

function(tmpl, c, def)

tmpl - 模板正文

c - 自定义编译设置,如果为 null,用到 doT.templateSettings

def - 编译时求值的数据(与前面编译时的数据不是同一份数据)

默认,产生的方法有一个参数 - data - 命名为 'it' 。修改 doT.templateSettings.varname,可以改变参数的名字和个数。

实例

插值(evaluation)

用法:{{= }},输出表达式,{{= }} 将其中的内容直接输出到html中。其中可以是在{{ }}中定义的变量、通过函数传入在it中的变量、也可以是全局变量、甚至可以是一个立即执行的function的返回结果。 可以简单的理解为可以获取特定作

用于下变量的单行js语句

//模板字符串:

{{

it.a= 1;

a= 2;

}}

{{= it.a}} it.a = 1{{= a}} a = 2{{= window}} window = [objectWindow]

{{= (function(){return 123})()}} function(){return 123})() = 123

创建模板,默认情况下,模板中的数据用it作为引用,可修改配置中的varname来改变变量名;

{{= it.msg }}
{{= it.code }}

使用:

var message ={

msg:'Hello world.',

code:200};//使用doT.template(tplText)函数,tplText为模板文本

var tpl = doT.template($("#testTpl").text()); //某些浏览器可能会取不到模板内容,可用$("#testTpl").html()//传入数据获取html

var html =tpl(message);

console.log(html);

结果输出:

Hello world.
200

求值(evaluate)

用法:{{ }},可在表达式中使用js脚本,代码片段,{{ }} 的用法非常灵活,里面可以直接写js语句。定义的变量可以直接在{{= }}中调用。也可以调用通过tempFn传入的数据(数据默认放在it对象内)。

//模板字符串:

{{var a = 1;

it.a= a + 1;

}}

{{= a}} //a 输出 1

{{= it.a}} //it.a 输出 2

也可以定义函数。并在其他的{{}} 区块内调用:

//模板字符串:

{{

function fn() {return 123}

}}

{{= fn()}} //fn 输出 123

也可以直接运行匿名函数

{{

(function() {

it.b= 123})();

}}

{{= it.b}} //it.b通过直接执行的匿名函数赋值为123

{{}}中的代码块随时可以被打断,插入dom片段等html内容:

//模板字符串:

{{var a = 3;if(a > 2) {

}}

a的值大于2

{{

}else{

}}

a的值小于2

{{

}

}}

此外,{{}}中也可以直接调用全局对象下的函数或变量。可以以此特点实现比较复杂的功能(通过专用的命名空间给doT模板提供一些过滤器等特色的支持等)。

注意:如果在tempFn函数的调用中不传参数或者传入的是undefined等空对象,则doT不会实例化it对象。此时在{{}}中赋值的it对象的值,{{=}}中无法拿到(js的值引用问题)。

创建模板:

{{ }else{ }}

操作错误

{{ } }}

使用:

var result ={

status:true,

error:''};var tpl = doT.template($("#testTpl2").text());var html =tpl(result);

console.log(html);

结果输出:

操作成功

条件语句(conditional)

用法:{{? }},{{?}}标签必须成对出现,起始标签中写入判断条件,并以另外一个{{?}}标签为结束。该标签和下面的{{~}}是{{if for}}的语法糖。

如上面的:

//模板字符串:

{{var a = 3;if(a > 2) {

}}

a的值大于2

{{

}else{

}}

a的值小于2

{{

}

}}

可以用本标签简写为:

//模板字符串:

{{var a = 3;

}}

{{? a>2}}

a的值大于2

{{?? true}}

a的值小于2

{{?}}

在上个 求值(evaluate) 例子中的模板恰好是条件判断,我们可以用{{? }}改写模板以达到一样的效果:

{{??}}

操作错误

{{?}}

使用方法参考求值(evaluate)例子,最后输出html是一样的。

数组迭代(iterate)

用法:{{~ }},循环,{{~}}标签必须成对出现,起始标签中写入对数组遍历的变量赋值:{{~it.array :value:index}},并以另外一个{{~}}标签为结束。

创建模板:

{{= index + 1 }} {{= item.name }} {{= item.email }}

{{~}}

使用:

var data ={

status:true,

msg:'success',

list: [{

id:1,

name:'zhangsan',

email:'zhangsan@lwhweb.com'}, {

id:2,

name:'lisi',

email:'lisi@lwhweb.com'}]

};var tpl = doT.template($("#testTpl3").html());var html =tpl(data);

console.log(html);

结果输出:

1 zhangsan zhangsan@lwhweb.com 2 lisi lisi@lwhweb.com

JAVA中dot的用法_doT学习(一)之语法相关推荐

  1. JAVA中dot的用法_Java 方法

    方法(有的人喜欢叫函数)是一段可重用的代码段. 一.方法的使用 1. 方法定义 方法定义的语法形式: [修饰符] 返回值类型 方法名([参数类型 参数名]){ ... 方法体 ...return返回值 ...

  2. java中的基本用法

    java中的基本用法 关键字:专门用途的字符串 所有java关键字都是小写英文 标识符 java常量 java变量 ■ 作用域:起作用的区域■ 使用前必须先声明,在赋值.使用变量名访问这块区域 jav ...

  3. Java中getResourceAsStream的用法

    Java中getResourceAsStream的用法 首先,Java中的getResourceAsStream有以下几种: 1. Class.getResourceAsStream(String p ...

  4. Java中getResourceAsStream的用法小结

    2019独角兽企业重金招聘Python工程师标准>>> Java中getResourceAsStream的用法小结 一.Java中的getResourceAsStream主要有以下三 ...

  5. java中substring的用法

    2019独角兽企业重金招聘Python工程师标准>>> java中substring的用法 str=str.substring(int beginIndex);截取掉str从首字母起 ...

  6. JAVA中Final的用法

    JAVA中Final的用法 1. 修饰基础数据成员的final 这是final的主要用途,其含义相当于C/C++的const,即该成员被修饰为常量,意味着不可修改.如java.lang.Math类中的 ...

  7. php simpledateformat,Java中SimpleDateFormat的用法介绍(代码示例)

    本篇文章给大家带来的内容是关于Java中SimpleDateFormat的用法介绍(代码示例),有一定的参考价值,有需要的朋友可以参考一下,希望对你有所帮助. 1.为什么要使用SimpleDateFo ...

  8. java中demo接人_return的用法_如何理解java中return的用法?

    C语言中return用法?(请熟练者进) return是返回值,这个返回值是和函数的类型有关的,函数的类型是什么,他的返回值就是什么 比方主函数intmain() {}这里就必须有一个return,只 ...

  9. java中native的用法

    java中native的用法前言:在查看 Thread.java 文件时,发现有一个 方法比较特殊 private native void start0();概念:native关键字说明其修饰的方法是 ...

  10. day9:JAVA中while的用法

    一.while循环 while循环是先判断条件是否为真,如果条件为真,则执行循环体. 语句形式: while( 循环条件 ){ 一条语句 / 多条语句 ( 循环体 ) } 二.do-while循环 d ...

最新文章

  1. 危机四伏的千亿级金融放贷市场,我们能做什么?
  2. Homebrew安装(MacOS)
  3. js如何判断一个对象是不是Array?
  4. python故事书_python的故事
  5. python pprint_【Python】输入和输出
  6. 028 -bash-4.1$ 出现故障的原理及解决办法?
  7. python 怎么将数组转为列表_怎么将视频转为GIF动态图 表情包怎么制作
  8. python朴素贝叶斯分类MNIST数据集
  9. DotNet操作Excel汇总
  10. HTML文本下划线效果,css文本下划线怎么打?
  11. Unity5 Survival Shooter开发笔记2
  12. LVS类型的介绍以及LVS的调度方法
  13. 阶段3 2.Spring_03.Spring的 IOC 和 DI_4 ApplicationContext的三个实现类
  14. html三级导航栏编写
  15. android 仿QQ相册
  16. 百度小程序html转码,百度小程序转换工具
  17. qlv是什么格式?要怎么把qlv格式转换成mp4视频
  18. 《MATLAB SYNTAX》第4章 多项式
  19. 航拍“中国南北地理分界线” 感受独特景观
  20. 腾讯云—人脸识别应用实践

热门文章

  1. 【Linux系列文章】Shell开发
  2. MSE、RMSE、MAE、R方等指标整理
  3. 单片机8255c语言程序,51单片机8255驱动C程序
  4. python3爬虫(5):财务报表爬取入库
  5. vue中头像加载不出来,怎样设置默认头像
  6. xprivacy改IMEI
  7. 专科计算机教育的现状,探析高职计算机专业英语教学现状
  8. 俄罗斯方块是java_俄罗斯方块(java版)
  9. ! [rejected] develop -> develop (non-fast-forward) error: failed to push some refs to...
  10. 一键帝国CMS快速重置管理员密码工具