模版字符串实例:模板编译
2016-01-15 14:23
441 查看
摘抄自ECMAScript6入门
下面,我们来看一个通过模板字符串,生成正式模板的实例。
上面代码在模板字符串之中,放置了一个常规模板。该模板使用
怎么编译这个模板字符串呢?
一种思路是将其转换为JavaScript表达式字符串。
这个转换使用正则表达式就行了。
然后,将
将上面的内容拼装成一个模板编译函数
下面,我们来看一个通过模板字符串,生成正式模板的实例。
var template = ` <ul> <% for(var i=0; i < data.supplies.length; i++) {%> <li><%= data.supplies[i] %></li> <% } %> </ul> `;
上面代码在模板字符串之中,放置了一个常规模板。该模板使用
<%...%>放置JavaScript代码,使用
<%= ... %>输出JavaScript表达式。
怎么编译这个模板字符串呢?
一种思路是将其转换为JavaScript表达式字符串。
echo('<ul>'); for(var i=0; i < data.supplies.length; i++) { echo('<li>'); echo(data.supplies[i]); echo('</li>'); }; echo('</ul>');
这个转换使用正则表达式就行了。
var evalExpr = /<%=(.+?)%>/g; var expr = /<%([\s\S]+?)%>/g; template = template .replace(evalExpr, '`); \n echo( $1 ); \n echo(`') .replace(expr, '`); \n $1 \n echo(`'); template = 'echo(`' + template + '`);';
然后,将
template封装在一个函数里面返回,就可以了。
var script = `(function parse(data){ var output = ""; function echo(html){ output += html; } ${ template } return output; })`; return script;
将上面的内容拼装成一个模板编译函数
compile。
function compile(template){
var evalExpr = /<%=(.+?)%>/g; var expr = /<%([\s\S]+?)%>/g; template = template .replace(evalExpr, '`); \n echo( $1 ); \n echo(`') .replace(expr, '`); \n $1 \n echo(`'); template = 'echo(`' + template + '`);';
var script = `(function parse(data){ var output = ""; function echo(html){ output += html; } ${ template } return output; })`; return script;}
compile函数的用法如下。
var parse = eval(compile(template)); div.innerHTML = parse({ supplies: [ "broom", "mop", "cleaner" ] }); // <ul> // <li>broom</li> // <li>mop</li> // <li>cleaner</li> // </ul>
相关文章推荐
- zabbix使用外部邮箱账号发送报警邮件设置
- 机器学习与数据挖掘网上资源搜罗
- Mybatis 中在传参时,$ 和# 的区别
- js-Event构造函数,也许你需要
- .net 连接sqlserver类库
- POJ2182(排队问题)
- 深入理解Android View
- 【转】python数据格式化之pprint
- iOS开发之添加自定义字体
- 内存错误
- iOS What The Fuck UITableView
- iOS8 以上版本的定位问题
- H3C S5120交换机OID
- Linux里startup.sh 和 shutdown.sh
- .net连接access操作类
- Android 第三方开源库收集整理(转)
- Windows Cmder
- HTTP代理模块(HTTP Proxy)
- for循环中的Ajax
- 过滤器Filter