template.js前端模板引擎使用详解


Posted in Javascript onOctober 10, 2017

本文介绍了template.js前端模板引擎使用,分享给大家,具体如下:

下载地址:https://github.com/yanhaijing/template.js

作者编写的文档:https://github.com/yanhaijing/template.js/blob/master/README.md

源码学习

默认的开始标签和结束标签分别是:

  1. sTag: '<%',//开始标签,可以重写,我项目中使用的是<:
  2. eTag: '%>',//结束标签,我项目中使用的是:>

快速上手

编写模板

使用一个type=”text/html”的script标签存放模板,或者放到字符串中:

<script id="tpl" type="text/html">
<ul>
  <%for(var i = 0; i < list.length; i++) {%>
  <li><%:=list[i].name%></li>
  <%}%>
</ul>
</script>

渲染模板

var tpl = document.getElementById('tpl').innerHTML;
template(tpl, {list: [{name: "yan"},{name: "haijing"}]});

输出:

<ul>
  <li>yan</li>
  <li>haijing</li>
</ul>

转义

<script id="tpl" type="text/html">
  <table>
    <caption>for循环输出两次</caption>
    <%var test = '输出自定义变量';%>
    <%for (var i = 0; i < 2; i++) {%>
      <tr><td><%=html%>默认</td><td><%=html%></td></tr>
      <tr><td><%:h=html>html转义</td><td><%:h=html%></td></tr>
      <tr><td><%:=html>不转义</td><td><%:=html%></td></tr>
      <tr><td><%:u=url>URI转义</td><td><%:u=url%></td></tr>
      <tr><td>var</td><td><%:=test%></td></tr>
      <tr><td><%=test + 1>表达式</td><td><%=test + 1%></td></tr>
      <%if (true) {%>
        <tr><td>if</td><td>if 语句</td></tr>
      <%}%>
      <tr><td>分割线</td><td>------------------------------</td></tr>
    <%}%>
  </table>
  </script>
  <script src="../template.js"></script>
  <script>
  var html = template(document.getElementById('tpl').innerHTML, {
    url: 'http://yanhaijing.com?name=颜海镜', 
    html: '<div id="test">template.js "</div>'
  });
  console.log(html);
  document.getElementById('wp').innerHTML = html;
  </script>
<script>
  template.config({sTag: '<#', eTag: '#>'});
  var tpl1 = '<div><#:=name#></div>';
  console.log('<##>:', template(tpl1, {name: '更改tag<##>'}));
  template.config({sTag: '{{', eTag: '}}'});
  var tpl1 = '<div>{{:=name}}</div>';
  console.log('{{}}:', template(tpl1, {name: '更改tag{{}}'}));
  template.config({sTag: '<%', eTag: '#>'});
  var tpl1 = '<div><%:=name#></div>';
  console.log('<%#>:', template(tpl1, {name: '不一致也可以哦,更改tag<%#>'})); 
  template.config({sTag: '<%', eTag: '%>', compress: true});
  var tpl1 = '<div>空格会被压缩 空格 空格</div>';
  console.log('compress:', template(tpl1, {}));  
  template.config({sTag: '<%', eTag: '%>', escape: false});
  var tpl1 = '<div>默认输出不进行转义<%=html%></div>';
  console.log('escape:', template(tpl1, {html: '<div>html</div>'}));
  </script>

注册函数

<div id="wp"></div>
  <script id="tpl" type="text/html">
  <%=dateFormat(Date.now(), 'yyyy年 MM月 dd日 hh:mm:ss')%>
  </script>
  <script src="../template.js"></script>
  <script>
    template.registerFunction('dateFormat', function (date, format) {
      date = new Date(date);
      var map = {
        "M": date.getMonth() + 1, //月份 
        "d": date.getDate(), //日 
        "h": date.getHours(), //小时 
        "m": date.getMinutes(), //分 
        "s": date.getSeconds(), //秒 
        "q": Math.floor((date.getMonth() + 3) / 3), //季度 
        "S": date.getMilliseconds() //毫秒 
      };
      format = format.replace(/([yMdhmsqS])+/g, function(all, t){
        var v = map[t];
        if(v !== undefined){
          if(all.length > 1){
            v = '0' + v;
            v = v.substr(v.length-2);
          }
          return v;
        }
        else if(t === 'y'){
          return (date.getFullYear() + '').substr(4 - all.length);
        }
        return all;
      });
      return format;
    });
    console.log(template.registerFunction());
    console.log(template.registerFunction('dateFormat'));
  </script>
  <script>
  var html = template(document.getElementById('tpl').innerHTML, {});
  console.log(html);
  document.getElementById('wp').innerHTML = html;
  template.unregisterFunction('dateFormat');
  console.log(template.registerFunction('dateFormat'));
  </script>
 
<div id="wp"></div>
  <script id="tpl" type="text/html">
  <%:up='yanhaijing'%>
  </script>
  <script src="../template.js"></script>
  <script>
    template.registerModifier('up', function (str) {
      return str.toUpperCase();
    });
    console.log(template.registerModifier());
    console.log(template.registerModifier('up'));
  </script>
  <script>
  var html = template(document.getElementById('tpl').innerHTML, {});
  console.log(html);
  document.getElementById('wp').innerHTML = html;
  template.unregisterModifier('up');
  console.log(template.registerModifier('up'));
  </script>

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Javascript 相关文章推荐
JQuery 表格操作(交替显示、拖动表格行、选择行等)
Jul 29 Javascript
基于jQuery的history历史记录插件
Dec 11 Javascript
关于在IE下的一个安全BUG --可用于跟踪用户的系统鼠标位置
Apr 17 Javascript
简述JavaScript中正则表达式的使用方法
Jun 15 Javascript
JAVASCRIPT代码编写俄罗斯方块网页版
Nov 26 Javascript
移动端 一个简单易懂的弹出框
Jul 06 Javascript
js中数组插入、删除元素操作的方法
Feb 15 Javascript
BootStrap表单控件之复选框checkbox和单选择按钮radio
May 23 Javascript
基于jquery实现多级菜单效果
Jul 25 jQuery
Vue 中批量下载文件并打包的示例代码
Nov 20 Javascript
详解ES6 export default 和 import语句中的解构赋值
May 28 Javascript
关于vue 项目中浏览器跨域的配置问题
Nov 10 Javascript
AngularJS中table表格基本操作示例
Oct 10 #Javascript
AngularJS中控制器函数的定义与使用方法示例
Oct 10 #Javascript
JavaScript实现计数器基础方法
Oct 10 #Javascript
JS实现合并json对象的方法
Oct 10 #Javascript
jQuery实现的form转json经典示例
Oct 10 #jQuery
JS实现websocket长轮询实时消息提示的效果
Oct 10 #Javascript
JavaScript中错误正确处理方式小结你用对了吗
Oct 10 #Javascript
You might like
excellent!――ASCII Art(由目标图象生成ascii)
2007/02/20 PHP
fleaphp crud操作之findByField函数的使用方法
2011/04/23 PHP
CodeIgniter读写分离实现方法详解
2016/01/20 PHP
CodeIgniter控制器之业务逻辑实例分析
2016/01/20 PHP
JQUERY1.6 使用方法四 检测浏览器
2011/11/23 Javascript
JS获取浏览器版本及名称实现函数
2013/04/02 Javascript
jQuery实现可拖动的浮动层完整代码
2013/05/27 Javascript
jquery实现盒子下拉效果示例代码
2013/09/12 Javascript
js函数返回多个返回值的示例代码
2013/11/05 Javascript
javascript实现超炫的向上滑行菜单实例
2015/08/03 Javascript
Node.js的MongoDB驱动Mongoose基本使用教程
2016/03/01 Javascript
Node.js 日志处理模块log4js
2016/08/28 Javascript
JavaScript reduce和reduceRight详解
2016/10/24 Javascript
js实现产品缩略图效果
2017/03/10 Javascript
underscore之function_动力节点Java学院整理
2017/07/11 Javascript
详解VUE中v-bind的基本用法
2017/07/13 Javascript
Taro UI框架开发小程序实现左滑喜欢右滑不喜欢效果的示例代码
2020/05/18 Javascript
vue 避免变量赋值后双向绑定的操作
2020/11/07 Javascript
用Python输出一个杨辉三角的例子
2014/06/13 Python
Python实现拷贝多个文件到同一目录的方法
2016/09/19 Python
python连接mongodb密码认证实例
2018/10/16 Python
TensorFlow实现从txt文件读取数据
2020/02/05 Python
Python将二维列表list的数据输出(TXT,Excel)
2020/04/23 Python
乌克兰电子产品和家用电器购物网站:TOUCH
2019/08/09 全球购物
飞利浦美国官网:Philips美国
2020/02/28 全球购物
硕士研究生求职自荐信范文
2014/03/11 职场文书
建议书标准格式
2014/03/12 职场文书
长江三峡导游词
2015/01/31 职场文书
2015年招商引资工作总结
2015/04/25 职场文书
妈妈再爱我一次观后感
2015/06/08 职场文书
严以律己学习心得体会
2016/01/13 职场文书
2019各种承诺书范文
2019/06/24 职场文书
三十年再续同学情倡议书
2019/11/27 职场文书
sqlserver2017共享功能目录路径不可改的解决方法
2021/04/16 SQL Server
SpringBoot 集成Redis 过程
2021/06/02 Redis
Java基础之线程锁相关知识总结
2021/06/30 Java/Android