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 相关文章推荐
点击广告后才能获得下载地址
Oct 26 Javascript
prototype 1.5相关知识及他人笔记
Dec 16 Javascript
用javascript getComputedStyle获取和设置style的原理
Oct 10 Javascript
javascript代码编写需要注意的7个小细节小结
Sep 21 Javascript
js字符编码函数区别分析
Dec 28 Javascript
用javascript读取xml文件读取节点数据
Aug 12 Javascript
js实现iGoogleDivDrag模块拖动层拖动特效的方法
Mar 04 Javascript
JS特效实现图片自动播放并可控的效果
Jul 31 Javascript
js实现div在页面拖动效果
May 04 Javascript
ECMAScript6轮播图实践知识总结
Aug 17 Javascript
js+html制作简单日历的方法
Jun 27 Javascript
AngularJS实现表格的增删改查(仅限前端)
Jul 04 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
php使用filter过滤器验证邮箱 ipv6地址 url验证
2013/12/25 PHP
微信公众号支付之坑:调用支付jsapi缺少参数 timeStamp等错误解决方法
2016/01/12 PHP
php实现基于pdo的事务处理方法示例
2017/07/21 PHP
JS获取键盘上任意按键的值(实例代码)
2013/11/12 Javascript
扩展JS Date对象时间格式化功能的小例子
2013/12/02 Javascript
struts2+jquery组合验证注册用户是否存在
2014/04/30 Javascript
javascript实现仿IE顶部的可关闭警告条
2015/05/05 Javascript
JavaScript 实现的 zip 压缩和解压缩工具包Zip.js使用详解
2015/12/14 Javascript
js实现将json数组显示前台table中
2017/01/10 Javascript
vue.js 获取当前自定义属性值
2017/06/01 Javascript
使用JS获取SessionStorage的值
2018/01/12 Javascript
ES6关于Promise的用法详解
2018/05/07 Javascript
Vue2.0点击切换类名改变样式的方法
2018/08/22 Javascript
vue中使用heatmapjs的示例代码(结合百度地图)
2018/09/05 Javascript
JS实现根据数组对象的某一属性排序操作示例
2019/01/14 Javascript
jQuery+ajax实现批量删除功能完整示例
2019/06/06 jQuery
[01:55]2014DOTA2国际邀请赛 BBC正赛第一天总结
2014/07/10 DOTA
利用Psyco提升Python运行速度
2014/12/24 Python
Python 读写文件和file对象的方法(推荐)
2016/09/12 Python
python matplotlib坐标轴设置的方法
2017/12/05 Python
Python实现在tkinter中使用matplotlib绘制图形的方法示例
2018/01/18 Python
Python编程深度学习计算库之numpy
2018/12/28 Python
Django渲染Markdown文章目录的方法示例
2019/01/02 Python
python使用mitmproxy抓取浏览器请求的方法
2019/07/02 Python
Python timeit模块的使用实践
2020/01/13 Python
python爬虫可以爬什么
2020/06/16 Python
TensorFlow的环境配置与安装教程详解(win10+GeForce GTX1060+CUDA 9.0+cuDNN7.3+tensorflow-gpu 1.12.0+python3.5.5)
2020/06/22 Python
Glamest意大利:女性在线奢侈品零售店
2019/04/28 全球购物
保荐人的岗位职责
2013/11/19 职场文书
企业优秀员工事迹材料
2014/05/28 职场文书
公司领导班子对照材料
2014/08/18 职场文书
民族团结好少年事迹材料
2014/08/19 职场文书
我与祖国共奋进演讲稿
2014/09/13 职场文书
工会工作个人总结
2015/03/03 职场文书
烛光里的微笑观后感
2015/06/17 职场文书
Redis RDB技术底层原理详解
2021/09/04 Redis