js模板引擎

前后交互过程中最麻烦的就是如何将json数据展示到页面中,循环拼接html的方法实在是太low了,饱受其苦,BAT同样会遇到这样的问题,于是乎就有个各自的js模板引擎,目的只有一个:让数据更快的呈现,页面更早的渲染。

这里比人做过比较http://www.cnblogs.com/guohu/p/3870677.html,腾讯的arttemplate有绝对性优势,那么我们就简单粗暴的选它了。

Tencent arttemplate使用

这里有官方的详细文档:腾讯arttemplate

语法介绍,分原生语法和简洁语法

arttemplate-native.js web版下载

tornado的模板语法和简洁语法冲突了,我去,那就用原生语法吧,最后已经配置成这个鸟样子了

  1. template.config('openTag','<@');
  2. template.config('closeTag','@>');
  1. <script type="text/html" id="tmp_msg">
  2. <@ for(var i=0; i < 5; i++){ @>
  3. <div class="col-md-12 clearfix" style="margin-top:5px;padding-bottom: 5px;border-bottom: 0.5px solid #ccc;">
  4. <div class="col-sm-2"><img src="/static/img/user.png" width="60px" height="60px" alt=""></div>
  5. <div class="col-sm-6">这是一个美国人发的测试消息</div>
  6. <div class="col-sm-2">2017-2-13 9:12</div>
  7. <div class="col-sm-2">
  8. <input type="checkbox">
  9. </div>
  10. </div>
  11. <@}@>
  12. </script>

一个bug

第一次用就碰到了个奇怪的事情,在调用template时总是没有输出

  1. var html = template(tmpName, resp);
  2. $('#' + tabName).html(html);

加上了对resp的判断之后就可以了,这是为什么?

  1. if (resp.data && resp.data.length > 0) {
  2. var html = template(tmpName, resp);
  3. $('#' + tabName).html(html);
  4. }

自定义配置

方法

基本用法


  1. <!DOCTYPE HTML>
  2. <html>
  3. <head>
  4. <meta charset="UTF-8">
  5. <title>basic-demo</title>
  6. <script src="../../dist/template-native.js"></script>
  7. </head>
  8. <body>
  9. <div id="content"></div>
  10. <script id="test" type="text/html">
  11. <% if (isAdmin) { %>
  12. <h1><%=title%></h1>
  13. <ul>
  14. <% for (var i = 0; i < list.length; i ++) { %>
  15. <li>索引 <%= i + 1 %> :<%= list[i] %></li>
  16. <% } %>
  17. </ul>
  18. <% } %>
  19. </script>
  20. <script>
  21. var data = {
  22. title: '基本例子',
  23. isAdmin: true,
  24. list: ['文艺', '博客', '摄影', '电影', '民谣', '旅行', '吉他']
  25. };
  26. var html = template('test', data);
  27. document.getElementById('content').innerHTML = html;
  28. </script>
  29. </body>
  30. </html>

在javascript中存放模板

  1. <!DOCTYPE HTML>
  2. <html>
  3. <head>
  4. <meta charset="UTF-8">
  5. <title>compile-demo</title>
  6. <script src="../../dist/template-native.js"></script>
  7. </head>
  8. <body>
  9. <h1>在javascript中存放模板</h1>
  10. <div id="content"></div>
  11. <script>
  12. var source = '<ul>'
  13. + '<% for (var i = 0; i < list.length; i ++) { %>'
  14. + '<li>索引 <%= i + 1 %> :<%= list[i] %></li>'
  15. + '<% } %>'
  16. + '</ul>';
  17. var render = template.compile(source);
  18. var html = render({
  19. list: ['摄影', '电影', '民谣', '旅行', '吉他']
  20. });
  21. document.getElementById('content').innerHTML = html;
  22. </script>
  23. </body>
  24. </html>

显示html


  1. <!DOCTYPE HTML>
  2. <html>
  3. <head>
  4. <meta charset="UTF-8">
  5. <title>no escape-demo</title>
  6. <script src="../../dist/template-native.js"></script>
  7. </head>
  8. <body>
  9. <h1>不转义HTML</h1>
  10. <div id="content"></div>
  11. <script id="test" type="text/html">
  12. <p>不转义:<%=#value%></p>
  13. <p>默认转义: <%=value%></p>
  14. </script>
  15. <script>
  16. var data = {
  17. value: '<span style="color:#F00">hello world!</span>'
  18. };
  19. var html = template('test', data);
  20. document.getElementById('content').innerHTML = html;
  21. </script>
  22. </body>
  23. </html>

嵌入子模板


  1. <!DOCTYPE HTML>
  2. <html>
  3. <head>
  4. <meta charset="UTF-8">
  5. <title>include-demo</title>
  6. <script src="../../dist/template-native.js"></script>
  7. </head>
  8. <body>
  9. <div id="content"></div>
  10. <script id="test" type="text/html">
  11. <h1><%=title%></h1>
  12. <%include('list')%>
  13. </script>
  14. <script id="list" type="text/html">
  15. <ul>
  16. <% for (var i = 0; i < list.length; i ++) { %>
  17. <li>索引 <%= i + 1 %> :<%= list[i] %></li>
  18. <% } %>
  19. </ul>
  20. </script>
  21. <script>
  22. var data = {
  23. title: '嵌入子模板',
  24. list: ['文艺', '博客', '摄影', '电影', '民谣', '旅行', '吉他']
  25. };
  26. var html = template('test', data);
  27. document.getElementById('content').innerHTML = html;
  28. </script>
  29. </body>
  30. </html>

自定义方法


  1. <!DOCTYPE HTML>
  2. <html>
  3. <head>
  4. <meta charset="UTF-8">
  5. <title>helper-demo</title>
  6. <script src="../../dist/template-native.js"></script>
  7. </head>
  8. <body>
  9. <h1>辅助方法</h1>
  10. <div id="content"></div>
  11. <script id="test" type="text/html">
  12. <%=dateFormat(time, 'yyyy<b>年</b> MM月 dd日 hh:mm:ss')%>
  13. </script>
  14. <script>
  15. /**
  16. * 对日期进行格式化,
  17. * @param date 要格式化的日期
  18. * @param format 进行格式化的模式字符串
  19. * 支持的模式字母有:
  20. * y:年,
  21. * M:年中的月份(1-12),
  22. * d:月份中的天(1-31),
  23. * h:小时(0-23),
  24. * m:分(0-59),
  25. * s:秒(0-59),
  26. * S:毫秒(0-999),
  27. * q:季度(1-4)
  28. * @return String
  29. * @author yanis.wang
  30. * @see http://yaniswang.com/frontend/2013/02/16/dateformat-performance/
  31. */
  32. template.helper('dateFormat', function (date, format) {
  33. date = new Date(date);
  34. var map = {
  35. "M": date.getMonth() + 1, //月份
  36. "d": date.getDate(), //日
  37. "h": date.getHours(), //小时
  38. "m": date.getMinutes(), //分
  39. "s": date.getSeconds(), //秒
  40. "q": Math.floor((date.getMonth() + 3) / 3), //季度
  41. "S": date.getMilliseconds() //毫秒
  42. };
  43. format = format.replace(/([yMdhmsqS])+/g, function(all, t){
  44. var v = map[t];
  45. if(v !== undefined){
  46. if(all.length > 1){
  47. v = '0' + v;
  48. v = v.substr(v.length-2);
  49. }
  50. return v;
  51. }
  52. else if(t === 'y'){
  53. return (date.getFullYear() + '').substr(4 - all.length);
  54. }
  55. return all;
  56. });
  57. return format;
  58. });
  59. // --------
  60. var data = {
  61. time: (new Date).toString(),
  62. };
  63. var html = template('test', data);
  64. document.getElementById('content').innerHTML = html;
  65. </script>
  66. </body>
  67. </html>

js模板 arttemplate 让数据与html分离的更多相关文章

  1. 各种JS模板引擎对比数据(高性能JavaScript模板引擎)

    最近做了JS模板引擎测试,拿各个JS模板引擎在不同浏览器上去运行同一程序,下面是模板引擎测试数据:通过测试artTemplate.juicer与doT引擎模板整体性能要有绝对优势: js模板引擎 Ja ...

  2. doT js 模板引擎【初探】要优雅不要污

    js中拼接html,总是感觉不够优雅,本着要优雅不要污,决定尝试js模板引擎. JavaScript 模板引擎 JavaScript 模板引擎作为数据与界面分离工作中最重要一环,越来越受开发者关注. ...

  3. doT.js模板引擎及基础原理

    时至今日,基于后端JavaScript(Node.js)和MVC思想也开始流行起来.模板引擎是数据和页面分离工作中最重要的一环,在各大门户网站均有利用到模板引擎. 模板引擎有很多种,但是原理了解也是非 ...

  4. JS 模板引擎 BaiduTemplate 和 ArtTemplate 对比及应用

    最近做项目用了JS模板引擎渲染HTML,JS模板引擎是在去年做项目是了解到的,但一直没有用,只停留在了解层面,直到这次做项目才用到,JS模板引擎用了两个 BaiduTemplate 和 ArtTemp ...

  5. js模板引擎--artTemplate

    js模板引擎--artTemplate 以前研究过一段时间的handlebars,但因为其渲染性能略逊于腾讯的artTemplate(在artTemplate的GitHub官网上有推荐的性能测试地址) ...

  6. JS数据绑定模板artTemplate试用

    之前写JS绑定数据曾经用过tmpl库,虽然功能比较强大但是感觉不是很轻量,对于相对简单的数据需求显得有些臃肿.而Ajax返回数据自己拼接html的方式又显得不够高端,因此今天看了一篇介绍artTemp ...

  7. js模板引擎-art-template常用总结

    art-template javascript 模板引擎,官网:https://github.com/aui/art-template 分为原生语法和简洁语法,本文主要是讲简洁语法 基础数据渲染 输出 ...

  8. js模板引擎-art-template常用总结(转)

    原文:https://www.cnblogs.com/shiyou00/p/6841801.html art-template javascript 模板引擎,官网:https://github.co ...

  9. js模板引擎art-template使用方法

    art-template是款性能卓越的 js 模板引擎 https://aui.github.io/art-template/ 特性 拥有接近 JavaScript 渲染极限的的性能 调试友好:语法. ...

随机推荐

  1. 浅析c++中virtual关键字

    http://blog.csdn.net/djh512/article/details/8973606 1.virtual关键字主要是什么作用? c++中的函数调用默认不适用动态绑定.要触发动态绑定, ...

  2. 从CRITS发展历史解读结构框架

    Michael Goffin 是MITRE公司的一名员工,在其博客中介绍了Crits 的发展历史.原文地址例如以下: CRITs: Collaborative Research Into Threat ...

  3. 怎样把vector和string数据传给旧的C API

     通常情况下.旧的C API使用数组合char*指针来进行数据交换而不是vector或string对象. 这种API还将存在非常长的一段时间,假设我们想有效地使用STL.我们就必须与它们和平共处. ...

  4. 趣谈Java变量的可见性问题

    了解过多线程的我们,对synchorized,sleep和valatile都比较了解,但是当这三个名词和“Java变量得可见性”的话题联系在一起不知道大家是否还可以保持大脑清晰??? 最近看到一个关于 ...

  5. 实用ExtJS教程100例-005:自定义对话框Ext.MessageBox.show

    我们对ExtJS对话框进行了三篇演示: MessageBox的三种用法 进度条对话框Ext.MessageBox.progress 等待对话框Ext.MessageBox.wait 通过上面三篇内容的 ...

  6. Java(C#)基础差异-数组

    1.填充数组 Java 数组填充替换方法Arrays.fill() 举例如下: import java.util.Arrays; public class FillDemo { public stat ...

  7. libstdc++.so.6: version `GLIBCXX_3.4.21' not found

    问题: dotnet: /usr/lib64/libstdc++.so.6: version `GLIBCXX_3.4.18' not found (required by dotnet)dotnet ...

  8. ADB与AVD的常见问题

    一.adb问题常用解决方法 若是模拟器启动正常,但是adb检测不到模拟器,我们给他一套不解释连招,下面教大家几招基础拳法. 1.基础拳法一:循环自动检测 下图那个小按钮,点它,狠狠的点它,然后点运行, ...

  9. Generalized normal distribution and Skew normal distribution

    Density Function The Generalized Gaussian density has the following form: where  (rho) is the " ...

  10. PHP 5.4.17 发布!

    PHP 5.4.17发布.2013-07-04 经过1个RC 上个版本是2013-06-07的5.4.16.修正了大约20个Bug以及几个安全漏洞.尽管5.5.0正式版已经发布.但5.4还未停止更新. ...