baiduTemplate / artTemplate

转载自   baiduTemplate / artTemplate

JS引擎模板


一、baiduTeplate

模板语法

提供一套模板语法,用户可以定义一个模板区块,每次根据传入的数据生成对应数据产生的html片段,从而渲染不同的界面效果;

优点:

  • 语法简单直观,学习成本低,开发效率低,采用JavaScript的原生语法;
  • 效率较高,默认html转义(防止XSS攻击),并且支持包括URL转义等多种转义;
  • 变量未定义直接输出为空,防止页面错乱;
  • 分隔符可以自定义;

用法

  • 1.引入文件

使用百度模板时,需要引入baiduTemplate.js文件
<script src='./baiduTemplate.js' type='text/javascript'></script>

  • 2.放置模板片段

    1. 页面中,模块可以放在<script>标签中,设置type为text/html 或 text/template,用 id 标识,代码示例:
      <script id="container1" type="text/html"> 模板部分 </script>
      2.或者存放在<textarea>中,一般情况设置其CSS样式display:none来隐藏掉textarea,同样用id来标识,代码示例:
      <textarea id="container2" style="display:none;"> 模板部分 </textarea>
      3.直接定义变量存储模板
      var tpl = "模板内容"
  • 3.调用引擎方式
    模板数据结构是json,可以在本地加载也可以从服务端加载过来
    方式1:baidu.template('container1',data); // 直接传入id即可
    方式2:baidu.template(tpl,data); // tpl是传入的模板(String类型),可以是模板的id也可以是一个模板片段的字符串,传入模板和对应的数据返回对应的html片段
    方式3:只传入tpl,这是返回的是一个编译后的函数,可以把这个函数缓存下来,传入不同的data就可以生成不同的html片段;
    代码示例: var fun = baidu.template(tpl);
    fun(data); // data 产生的html片段
    fun(data1); // data1 产生的html片段

自定义 分隔符

模板的分隔符为%,也可以自定义,自定义语法如下:设置左分隔符:baidu.template.LEFT_DELIMITER = '<!';设置右分隔符:baidu.template.RIGHT_DELIMITER = '!>'

模板js语法

    <% var test = function(){//函数体};if(1){}else{};function testFun(){return;};%>` 数据设置value值时,需要使用 =`var data={"title":'欢迎使用baiduTemplate',"list":['test1:默认支持HTML转义,如输出<script>,也可以关掉,语法<:=value> 详见API','test2:','test3:','test4:list[5]未定义,模板系统会输出空']};

 

二、atrTempalte

模板语法(两个版本可供使用,原生与简洁)

  • 原生语法 原生语法需要引入原生语法版 template-native.js
    1.使用:
    在页面中引用引擎: <script src='./template-native.js'></script>
    2.表达式:
    <% %> 符号包裹起来的语句则为模板的逻辑表达式;
    对内容编码输出:<%=data%>
    不编码输出:<%=#data%>
    编码可以防止数据中含有 HTML 字符串,避免引起 XSS 攻击。
    3.逻辑 支持js原生语法
    a.使用一个type="text/html"的script标签存放模板:
    <h1><%=#name%></h1><%for(var i = 0; i<friends.length;i++){%><ul><li><%=friends[i]%></li></ul><%}%>

b.渲染模板: 

    var data = {name:'tom',friends:[{name:'cat'},{name:'jerry'},{name:'lily'}]}var html = template(id,data);document.body.innerHTML = html;

4.模板包含表达式,用于嵌套子模板
5.模板不能访问全局对象,使用公用方法 template.helper(name,callback)注册公用辅助方法

    template.helper('$ubb2html', function (content) {// 处理字符串...return content;});

模板中使用方式:

    <% $ubb2html(content) %>
  • 简介用法 简洁语法需要引入简洁语法版 template.js
    推荐使用,语法简单实用,利于读写。
    1.使用:
    在页面中引用引擎: <script src='./template.js'></script>
    2.表达式:
    {{ 与 }} 符号包裹起来的语句则为模板的逻辑表达式。
    条件表达式:
    {{if admin}}<p>admin</p>{{else if code > 0}}<p>master</p>{{else}}<p>error!</p>{{/if}}

遍历表达式: 

    {{each list as value index}}<li>{{index}} - {{value.user}}</li>{{/each}}// 或者 (此方法需要加$符){{each list}}<li>{{$index}} - {{$value.user}}</li>{{/each}}

方法

  • 1.template(id, data);根据渲染模板。内部会根据document.getElementById(id)查找模板。如果没有 data 参数,那么将返回一渲染函数。
  • 2.template.compile(source, options); 返回一个渲染参数
  • 3.template.helper(name, callback); 返回一个渲染结果(添加辅助方法)
  • 4.template.config(name, value); 更改引擎的默认设置

artTemplate 支持nodejs Express

  • 1.安装:npm-install art-template
  • 2.使用: var template = require('art-template');
    var data = {list:['data1','data2']};
    var html = template(__dirname + 'index/main',data);

Nodejs + Express

    var template = require('art-template');template.config('base', '');template.config('extname', '.html');app.engine('.html', template.__express);app.set('view engine', 'html');//app.set('views', __dirname + '/views');

运行demo:
node demo/node-template-express.js

 

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

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

相关文章

辅助Visual Studio 2017部署的DevOps新工具

我们能看到Visual Studio 2017中的一个重大改进是对安装程序做了完全重写。前期的Visual Studio构建版本都是大一统的&#xff0c;完成安装需要相当长的时间和大量的磁盘空间。因此有需求要对安装过程做一些改进&#xff0c;这在本质上需要改进Visual Studio及其组件的检测方式…

2016蓝桥杯省赛---java---B---6(方格填数)

题目描述 方格填数 思路分析 全排列检查 代码实现 package com.atguigu.TEST;import static java.lang.Math.abs;class Main{static int a[]{0,1,2,3,4,5,6,7,8,9};static int ans;public static boolean check(){if (abs(a[0] - a[1]) 1 || abs(a[0] - a[3]) 1 || abs…

mybatis+spring报错PropertyAccessException 1: org.springframework.beans.MethodInvocationException

报错如下&#xff1a; * org.springframework.beans.factory.BeanCreationException: Error creating bean with name ‘dataSource’ defined in class path resource [applicationContext.xml]: Error setting property values; nested exception is org.springframework…

java中的tostring_java 中重写toString()方法

toString()方法 一般出现在System.out.println(类名.toString());toString()是一种自我描述方法 本身返回的是 getClass().getName() "" Integer.toHexString(hashCode());也就是 类名 hashCode的值重写toString() 只会对类生效&#xff0c;并不能字符串生效; 例如…

art-template入门(一)之介绍

转载自 art-template介绍 介绍 art-template 是一个简约、超快的模板引擎。 它采用作用域预声明的技术来优化模板渲染速度&#xff0c;从而获得接近 JavaScript 极限的运行性能&#xff0c;并且同时支持 NodeJS 和浏览器。在线速度测试。 特性 拥有接近 JavaScript 渲染极…

走过20年……你出现在哪里?

Visual Studio Live 倒计时ing 20岁的 Visual Studio 陪伴了一代代程序猿的成长&#xff0c;从青葱岁月一直走过而立之年&#xff0c;从一个小后生变成了 wuli欧巴……由单身狗也成了孩子他爸…… 如今二十载已过&#xff0c;你还记得当年大明湖畔的 Visual Studio 么&#xff…

2016蓝桥杯省赛---java---B---7(剪邮票)

题目描述 剪邮票 思路分析 全排列深度优先搜索连通检查 代码实现 package com.atguigu.TEST;class Main{static int a[] { 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1 };static int ans;static boolean vis[]new boolean[12];static void dfs(int g[][], int i, int j) {g[i][…

css解决li边框重合问题

我直接写了个案例&#xff0c;先看下效果图&#xff1a; 下面是html代码&#xff1a; <!DOCTYPE html> <html><head><meta charset"utf-8" /><title>机构动态</title><style type"text/css">*{margin:0px;p…

art-template 入门(二)之安装

转载自 art-template 安装 安装 Npm npm install art-template --save在浏览器中实时编译 下载&#xff1a;lib/template-web.js&#xff08;gzip: 6kb&#xff09; 兼容 IE8&#xff08;IE8 需要补丁才能运行。示例&#xff09; 差异 因为浏览器不支持文件系统&#x…

java文件输入与输出_java文件输入和输出

1.输入读取文件:import java.io.*;import java.math.*;import java.util.*;public class Main{public static void main(String args[]) throws Exception{Scanner cinnew Scanner((new FileInputStream("D:\\in.txt")));int a,b;while(cin.hasNext()){acin.nextInt(…

学习ASP.NET Core,你必须知道“中间件”是什么?中间件如何注册?请求处理管道是如何通过中间件构建的?

ASP.NET Core 的请求处理管道由一个Server和一组有序排列的中间件构成&#xff0c;前者仅仅完成基本的请求监听、接收和响应的工作&#xff0c;请求接收之后和响应之前的所有工作都交给注册的中间件来完成。ASP.NET Core的中间件通过一个类型Func<RequestDelegate, RequestD…

2016蓝桥杯省赛---java---B---8(四平方和)

题目描述 四平方和 代码实现 package com.atguigu.TEST;import java.util.Scanner;class Main{public static void main(String[] args) {Scanner sc new Scanner(System.in);int N0;if (sc.hasNext()){Nsc.nextInt();}for (int a 0; a < 2400; a) {for (int b a; b…

springmvc报错 nested exception is org.mybatis.spring.MyBatisSystemException:

今天在做ssm整合的时候发现了一个错误&#xff0c;头疼了半天没解决&#xff0c;错误如下&#xff1a; 三月 10, 2018 6:43:37 下午 org.apache.catalina.core.AprLifecycleListener init 警告: The APR based Apache Tomcat Native library failed to load. The error repor…

java 银行帐号_Java程序(银行账户管理)

package 账户管理;import java.text.SimpleDateFormat;import java.util.Date;public class Zhanghu {private String _account;private String _name;private String _ID;private Date _accounTimet ;private double _balance;public Zhanghu(String account , String name , …

art-template入门(三)之语法

转载自 art-template语法 语法 art-template 支持标准语法与原始语法。标准语法可以让模板易读写&#xff0c;而原始语法拥有强大的逻辑表达能力。 标准语法支持基本模板语法以及基本 JavaScript 表达式&#xff1b;原始语法支持任意 JavaScript 语句&#xff0c;这和 EJS …

在物理内存中观察CLR托管内存及GC行为

虽然看了一些书&#xff0c;还网络上的一些博文&#xff0c;不过对CLR托管内存细节依然比较模糊。而且因为工作原因总会有很多质疑&#xff0c;想要亲眼看到内存里二进制数据的变化。 所以借助winhex直接查看内存以证实书上的描述或更进一步揣摩CLR托管内存的运作方式&#xff…

2017蓝桥杯省赛---java---B---1(购物单)

题目描述 &#xff08;购物单&#xff09; 思路分析 cmd 打开电脑上的计算器算(算出来的结果是00结尾&#xff0c;作为检测) 答案 5200

art-template入门(四)之调试

转载自 art-template调试 template.defaults.debug art-template 内建调试器&#xff0c;能够捕获到语法与运行错误&#xff0c;并且支持自定义的语法。在 NodeJS 中调试模式会根据环境变量自动开启&#xff1a;process.env.NODE_ENV ! production 设置 template.defaults.…

java 取随机正整数_Java获取随机数

Java 获取随机数import java.util.Random;public class randomDemo {public static void main(String[]args){randomDemo rnew randomDemo();System.out.println(r.randomCode());}public static String randomCode() {StringBuilder str new StringBuilder("");Ran…

DataProtection设置问题引起不同ASP.NET Core站点无法共享用户验证Cookie

这是这两天ASP.NET Core迁移中遇到的一个问题。2个ASP.NET Core站点&#xff08;对应于2个不同的ASP.NET Core Web应用程序&#xff09;&#xff0c;2个站点都可以登录&#xff0c;但在其中任1个站点登录后&#xff0c;在当前站点处于登录状态&#xff0c;访问另外1个站点却处于…