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 相关文章推荐
javascript KeyDown、KeyPress和KeyUp事件的区别与联系
Dec 03 Javascript
也说JavaScript中String类的replace函数
Sep 22 Javascript
字段太多jquey快速清空表单内容方法
Aug 21 Javascript
如何在node的express中使用socket.io
Dec 15 Javascript
JavaScript数组Array对象增加和删除元素方法总结
Jan 20 Javascript
Node.js重新刷新session过期时间的方法
Feb 04 Javascript
Bootstrap4一次重大更新 几乎涉及每行代码
May 16 Javascript
jQuery实现定位滚动条位置
Aug 05 Javascript
浅谈JS之tagNaem和nodeName
Sep 13 Javascript
AngularJS Controller作用域
Jan 09 Javascript
JS原型与继承操作示例
May 09 Javascript
vue实现评论列表功能
Oct 25 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通用检测函数集合
2011/02/08 PHP
领悟php接口中interface存在的意义
2013/06/27 PHP
使用PHP similar text计算两个字符串相似度
2015/11/06 PHP
多个Laravel项目如何共用migrations详解
2018/09/25 PHP
PHP hebrev()函数用法讲解
2019/02/21 PHP
获取页面高度,窗口高度,滚动条高度等参数值getPageSize,getPageScroll
2006/09/22 Javascript
JavaScript用JQuery呼叫Server端方法示例代码
2014/09/03 Javascript
AngularJS iframe跨域打开内容时报错误的解决办法
2015/01/26 Javascript
使用AngularJS创建单页应用的编程指引
2015/06/19 Javascript
JavaScript截断字符串的方法
2015/07/15 Javascript
返回函数的JavaScript函数
2016/06/14 Javascript
荐书|您有一份JavaScript书单待签收
2017/07/21 Javascript
vue中$set的使用(结合在实际应用中遇到的坑)
2018/07/10 Javascript
使用typescript构建Vue应用的实现
2019/08/26 Javascript
Vue 实例事件简单示例
2019/09/19 Javascript
vue项目中监听手机物理返回键的实现
2020/01/18 Javascript
Python的Flask框架中使用Flask-Migrate扩展迁移数据库的教程
2016/06/14 Python
Python 中的range(),以及列表切片方法
2018/07/02 Python
django celery redis使用具体实践
2019/04/08 Python
浅析python表达式4+0.5值的数据类型
2020/02/26 Python
Python模拟登录和登录跳转的参考示例
2020/10/30 Python
几个常见的消息中间件(MOM)
2014/01/08 面试题
出国签证在职证明
2014/01/16 职场文书
《小儿垂钓》教学反思
2014/02/23 职场文书
《月球之谜》教学反思
2014/04/10 职场文书
《爱如茉莉》教后反思
2014/04/12 职场文书
优秀毕业生就业推荐信
2014/05/22 职场文书
2014年工会工作总结
2014/11/12 职场文书
市场营销计划书
2015/01/17 职场文书
前台接待员岗位职责
2015/04/15 职场文书
2015年生活老师工作总结
2015/05/27 职场文书
2015初中团委工作总结
2015/07/28 职场文书
开学典礼校长致辞
2015/07/29 职场文书
JS实现数组去重的11种方法总结
2022/04/04 Javascript
我收到了德劲DE1107
2022/04/05 无线电
Tomcat执行startup.bat出现闪退的原因及解决办法
2022/04/20 Servers