formatJson是legos开发模式下很常用的js模板引擎。它其实是jQuery的创始人John Resig 2008年写的Micro-Templating。虽然代码有些旧了,但是其中的思想还是值得借鉴的。
1 | define("formatJson", function(require, exports, module) { |
稍稍整理下,将字符替换部分提出来·
1 | define("formatJson", function(require, exports, module) { |
模板的语法很简单,有三条基本规则
1.用正常的方式书写html
2.用<% %>嵌套JavaScript语句
3.用<%= %>嵌套JavaScript 变量值
应用举例:
1 | // tpl模板 |
1 |
|
1 | // 通过模板和data解析的html |
1 | // 经过 getStr 处理后 |
1 | /*加上头尾 |
步骤分解解释:
第一步: replace(/[\r\t\n]/g, “ “)
去掉回车,换行,制表1
2
3
4
5
6
7<% for ( var i = 0; i < items.length; i++ ) { %>
<% if( i%2 == 0) {%>
<li><%=items[i].id%>:<%=items[i].name%></li>
<% } %>
<% } %>
<% print('数组长度' + items.length ); %>
<div style='background:<%=color%>'><%=id%></div>
第二步: split(“<%”).join(“\t”)
<%替换为\t
1 | \t for ( var i = 0; i < items.length; i++ ) { %> |
第三步: replace(/((^|%>)[^\t]*)’/g, “$1\r”)
替换需要保留的’为\r, 主要是节点属性操作
1 | \t for ( var i = 0; i < items.length; i++ ) { %> |
第四步: replace(/\t=(.*?)%>/g, “‘,$1,’”)
赋值部分替换,’,$1,’,实际是把赋值部分独立出来,那么push到这里的时候,就会进行运算
1 | \t for ( var i = 0; i < items.length; i++ ) { %> |
第五步: split(“\t”).join(“‘);”)
剩下的\t,代表了js语句开始部分, js语句\t替换为’); ,正是push的结束部分,正好完成push语句
1 | '); for ( var i = 0; i < items.length; i++ ) { %> |
第六步: split(“%>”).join(“p.push(‘“);
剩下的%>体表了js语句的结束,替换为p.push(‘“,开启新的环节
1 | '); for ( var i = 0; i < items.length; i++ ) { p.push(' |
第七部: split(“\r”).join(“\’”)
替换\r为’ , 恢复str.replace(/((^|%>)[^\t]*)’/g, “$1\r”) 去掉的’
1 | '); for ( var i = 0; i < items.length; i++ ) { p.push(' |
加上头尾
1 | var p=[],print=function(){p.push.apply(p,arguments);};with(obj){p.push(' |
最后格式化一下
1 | var p = [], print = function () { p.push.apply(p, arguments); }; with (obj) { |
参考资料:
Micro Templating例子
https://codepen.io/xiangwenhu/pen/dJdGBj/
Micro Templating源码分析
https://www.cnblogs.com/cloud-/p/8253123.html
最简单的JavaScript模板引擎
https://www.cnblogs.com/dolphinX/p/3489269.html