doT.js模板学习笔记

news2024/11/24 15:55:20

doT.js模板学习笔记

  • 欢迎学习doT.js模板学习笔记
    • doT.js模板是什么
    • doT.js 主要优势在
    • doT.js好处
    • 引入方式
    • 基本语法
    • 语法示例
    • 结尾

欢迎学习doT.js模板学习笔记

doT.js官方网站
本文章得示例源码

doT.js模板是什么

doT.js 是一个 JavaScript 模板框架,在 web 前端使用 dot.js 作为模板引擎,主要的用途就是,在写好的模板上,放进数据,生成含有数据的 html 代码。

doT.js 主要优势在

  1. 小巧精简,源代码不超过两百行,6KB 的大小,压缩版只有 4KB;
  2. 支持表达式丰富,涵盖几乎所有应用场景的表达式语句;
  3. 性能优秀;
  4. 不依赖第三方库。

doT.js好处

和后端渲染不同,doT.js 的渲染完全交由前端来进行,这样做主要有以下好处:

  • 脱离后端渲染语言,不需要依赖后端项目的启动,从而降低了开发耦合度、提升开发效率;
  • View 层渲染逻辑全在 JavaScript 层实现,容易维护和修改;
  • 数据通过接口得到,无需考虑后端数据模型变化,只需关心数据格式。

引入方式

  • javascript 文件引入:
<script type="text/javascript" src="./js/doT.min.js"></script>
  • node.js 方式
 npm install dot

然后在代码中使用

require('dot')

基本语法

  1. 插值:{{=it.xxx }}
  2. 取值:{{=xxx }}
  3. 遍历数组:{{~it.array :value:index}} ...{{~}}
  4. 遍历对象:javascript {{ for var key in data { }} {{= key }} {{ } }}
  5. 三木运算:{{=(it.value=='somevalue'?'value1':'value2')}}
  6. 条件判断:{{? }} 表if{{??}}表else if{{??}}表else
  7. encoding后再插值:{{!it.xxx}}
  8. 编译时取值:{{# }} for compile-time evaluation/includes and partials
  9. 编译时定义:{{## #}} for compile-time defines

语法示例

  1. 插值:{{=it.xxx }} 用法:
<!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <meta http-equiv="X-UA-Compatible" content="ie=edge">
    <title>Document</title>
    <script type="text/javascript" src="./js/doT.min.js"></script>
    <script type="text/javascript" src="./js/jquery-1.11.3.min.js"></script>
</head>

<body>
    <div id="showHtml"></div>
    <script type="text/javascript">
            var data = {"name":"Jake","age":31};
            var str = "<div>Hi {{=it.name}}!</div><div>{{=it.age || ''}}</div>"
            var tempFn = doT.template(str);
            $("#showHtml").html(tempFn(data));
    </script>
</body>
</html>

输出:在这里插入图片描述

  1. 取值:{{=xxx }} 和 遍历对象 用法:
<!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <meta http-equiv="X-UA-Compatible" content="ie=edge">
    <title>Document</title>
    <script type="text/javascript" src="./js/doT.min.js"></script>
    <script type="text/javascript" src="./js/jquery-1.11.3.min.js"></script>
</head>

<body>
    <div id="showHtml"></div>
    <script type="text/javascript">
            var data = {"name":"Jake","age":31,"mother":"Kate","father":"John",
            "interests":["basketball","hockey","photography"],"contact":{"email"
            :"jake@xyz.com","phone":"999999999"}};
            var str = "{{ for(var prop in it) { }}<div>{{=prop}}</div>{{ } }}"
            var tempFn = doT.template(str);
            $("#showHtml").html(tempFn(data));
    </script>
</body>
</html>

输出:在这里插入图片描述

  1. 遍历数组:{{~it.array :value:index}} ...{{~}}用法:
<!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <meta http-equiv="X-UA-Compatible" content="ie=edge">
    <title>Document</title>
    <script type="text/javascript" src="./js/doT.min.js"></script>
    <script type="text/javascript" src="./js/jquery-1.11.3.min.js"></script>
</head>

<body>
    <div id="showHtml"></div>
    <script type="text/javascript">
            var data = {"array":["banana","apple","orange"]};
            var str = "{{~it.array:value:index}}<div>{{=value}}!</div>{{~}}"
            var tempFn = doT.template(str);
            $("#showHtml").html(tempFn(data));
    </script>
</body>
</html>

输出:在这里插入图片描述

  1. 三木运算:{{=(it.value=='somevalue'?'value1':'value2')}} 用法
<!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <meta http-equiv="X-UA-Compatible" content="ie=edge">
    <title>Document</title>
    <script type="text/javascript" src="./js/doT.min.js"></script>
    <script type="text/javascript" src="./js/jquery-1.11.3.min.js"></script>
</head>

<body>
    <div id="showHtml"></div>
    <script type="text/javascript">
            var data = {"name":"Jake","age":31};
            var str = "{{=(it.name=='Tom'?'我':'他')}}"
            var tempFn = doT.template(str);
            $("#showHtml").html(tempFn(data));
    </script>
</body>
</html>

输出:在这里插入图片描述

  1. 条件判断:{{? }} 表if{{??}}表else if{{??}}表else 用法:
<!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <meta http-equiv="X-UA-Compatible" content="ie=edge">
    <title>Document</title>
    <script type="text/javascript" src="./js/doT.min.js"></script>
    <script type="text/javascript" src="./js/jquery-1.11.3.min.js"></script>
</head>

<body>
    <div id="showHtml"></div>
    <script type="text/javascript">
            var data = {"name":"Jake","age":31};
            var str = "{{? !it.name == 'Tom'}} <div> 我叫Tom</div>" +
            "{{??}}<div> 我叫Jake</div>{{?}}";
            var tempFn = doT.template(str);
            $("#showHtml").html(tempFn(data));
    </script>
</body>
</html>

输出:在这里插入图片描述

结尾

以上是doT.js的基础用法。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1044758.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Netty场景及其原理

Netty场景及其原理 Netty简化Java NIO的类库的使用&#xff0c;包括Selector、 ServerSocketChannel、 SocketChannel、ByteBuffer&#xff0c;解决了断线重连、 网络闪断、心跳处理、半包读写、 网络拥塞和异常流的处理等。Netty拥有高性能、 吞吐量更高&#xff0c;延迟更低…

909. 蛇梯棋

909. 蛇梯棋 题目-中等难度示例1. bfs 题目-中等难度 给你一个大小为 n x n 的整数矩阵 board &#xff0c;方格按从 1 到 n2 编号&#xff0c;编号遵循 转行交替方式 &#xff0c;从左下角开始 &#xff08;即&#xff0c;从 board[n - 1][0] 开始&#xff09;每一行交替方向…

Cat Online Judge 判题系统

Cat Online Judge 作者&#xff1a;猫十二懿 项目介绍 本项目是基于 Spring Boot Spring Cloud Alibaba 微服务 Docker RabbitMQ Vue 3 的 编程算法题目在线评测系统 &#xff08;简称OJ&#xff09;。 在线访问&#xff1a;http://oj.kongshier.top/ 源项目来自编程导航…

Postman接口自动化

一、接口测试的简介和分类 接口测试就是测试系统组件接口之间的一种测试。 分类 : 测试外部接口: 测试被测系统和外部系统之间的接口。( 只需要测试正例即可 ) 测试内部接口 : 1、内部接口只提供给内部系统使用。( 预算系统&#xff0c;承保系统 )( 只需要测试正例即可 ) 2、…

【算法】分治法

文章目录 概念原理和步骤代码示例 总结 概念 分治法&#xff08;Divide and Conquer&#xff09;是一种算法设计策略&#xff0c;其思想是将一个大问题划分为若干小规模的子问题&#xff0c;然后递归地解决每个子问题&#xff0c;并将它们的解合并起来以得到原始问题的解。分治…

记一次springboot的@RequestBody json值注入失败的问题(字段大小写的问题)

有时候做后端开发时&#xff0c;难免会与算法联调接口&#xff0c;很多算法的变量命名时全部大写&#xff0c;在实际springmvc开发中会遇到无法赋值的问题。 先粘贴问题代码 entity类 Data NoArgsConstructor EqualsAndHashCode(callSuper true) ToString(callSuper true) …

Linux命令之chattr命令

一、chattr命令简介 chattr命令用于更改文件或目录的属性&#xff0c;包括不可修改属性、同步属性、追加属性、无尽属性、压缩属性、无尽属性、不可删除属性等。chattr命令只能由超级用户或文件的所有者使用。 二、chattr命令使用示例 1、给文件设置版本 -v参数设置版本信息只…

数据库备份的几种方式

数据已成为当今数字时代公司的主要资产。然而&#xff0c;数据的安全性和完整性也成为企业经营的主要挑战。数据库备份对于维护这些宝贵的数据尤为重要。本文将详细介绍几种比较常见的数据库备份方式&#xff0c;帮助用户掌握如何有效地保护数据&#xff0c;保证业务的可持续发…

linux使用操作[1]

文章目录 版权声明快捷键ctrl c 强制停止ctrl d 退出、登出history命令光标移动快捷键清屏快捷键 软件安装命令常见linux系统包管理器yum命令apt命令 systemctl命令软连接日期&时区修改linux时区ntp程序 IP地址&主机名ip&主机名域名解析win配置主机名映射虚拟机…

Mysql003:基础查询

目录&#xff1a; 1. 基本查询 2. 条件查询&#xff08;where&#xff09; 3. 聚合函数&#xff08;count、max、min、avg、sum&#xff09; 4. 分组查询&#xff08;group by&#xff09; 5. 分组后查询&#xff08;having&#xff09; 6. 排序查询&#xff08;order by&#…

【空间-光谱联合注意网络:多时相遥感图像】

A Spatial–Spectral Joint Attention Network for Change Detection in Multispectral Imagery &#xff08;一种用于多光谱图像变化检测的空间-光谱联合注意网络&#xff09; 变化检测是通过比较双时相图像来确定和评估变化&#xff0c;这是遥感领域的一项具有挑战性的任务…

Wireshark抓包分析ICMP协议

「作者主页」&#xff1a;士别三日wyx 「作者简介」&#xff1a;CSDN top100、阿里云博客专家、华为云享专家、网络安全领域优质创作者 「推荐专栏」&#xff1a;对网络安全感兴趣的小伙伴可以关注专栏《网络安全入门到精通》 分析目的&#xff1a;分析ICMP协议的数据格式、报文…

【赠书活动】无测试组织:测试团队的敏捷转型

&#x1f449;博__主&#x1f448;&#xff1a;米码收割机 &#x1f449;技__能&#x1f448;&#xff1a;C/Python语言 &#x1f449;公众号&#x1f448;&#xff1a;测试开发自动化【获取源码商业合作】 &#x1f449;荣__誉&#x1f448;&#xff1a;阿里云博客专家博主、5…

不可忽视的字符函数与字符串函数:它们如何改变你的编程世界

&#x1f493;博客主页&#xff1a;江池俊的博客⏩收录专栏&#xff1a;C语言进阶之路&#x1f449;专栏推荐&#xff1a;✅C语言初阶之路 ✅数据结构探索&#x1f4bb;代码仓库&#xff1a;江池俊的代码仓库&#x1f389;欢迎大家点赞&#x1f44d;评论&#x1f4dd;收藏⭐ 文…

苹果恢复出厂设置怎么操作?方法在这!

手机恢复出厂设置&#xff0c;简单点来说就是将手机恢复到出厂时的默认状态。如果在使用手机的过程中遇到内存不足、系统闪退、应用卡顿等问题&#xff0c;可以尝试通过将手机恢复出厂设置来解决问题。那么&#xff0c;苹果恢复出厂设置的方法是什么&#xff1f;还不知道如何操…

API接口自动化测试框架

前言 接口自动化逐渐成为各大公司投入产出最高的测试技术。但是如何在版本迅速迭代过程中提高接口自动化的测试效率&#xff0c;仍然是大部分公司需要解决的问题。 框架定位 数据驱动设计模式&#xff0c;无需写测试代码脚本即可实现自动化等价类非等价类覆盖&#xff0c; E2E…

浅谈如何预防高层小区电气火灾的发生

【摘要】&#xff1a;随着国民经济的发展和人民生活水平的不断提高&#xff0c;我国工业用电和家庭用电量逐年增加。电气火灾造成的人员伤亡和财产损失巨大&#xff0c;时刻威胁着人们的生命及财产安全。众所周知&#xff0c;因供电线路或用电设备的损坏引发的接地电气火灾的例…

Seata入门系列【2】Spring Cloud 2021.0.5集成seata 1.7.1

1 引出分布式事务问题 1.1 seata-service-account编写查询用户、远程调用下订单接口 RestController RequestMapping("/accountTbl") public class AccountTblController {AutowiredAccountTblMapper accountTblMapper;AutowiredOrderFeign orderFeign;GetMapping(…

西门子KTP触摸屏做画面时如何把设备图片或Logo做到画面上?

西门子KTP触摸屏做画面时如何把设备图片或Logo做到画面上&#xff1f; 如下图所示&#xff0c;新建一个项目&#xff0c;添加一个触摸屏设备&#xff0c;这里以TP1200 Comfort触摸屏为例进行说明&#xff0c;双击进入根画面&#xff0c; 如下图所示&#xff0c;在右侧的工具箱中…

SpringBoot 学习(一)自动装配

本系列文章为【狂神说 Java 】视频的课堂笔记&#xff0c;若有需要可配套视频学习。 1.1 pom.xml (1) 父工程&#xff08; spring-boot-starter-parent &#xff09; 核心依赖&#xff0c;静态资源过滤等配置。编写或导入 springboot 依赖时不需要指定版本号&#xff0c;继承…