一种轻便且灵活的js模板的思路
一种轻便且灵活的js模板的思路
思路背景
在Vue、React、Angular等大前端框架异军突起的今天,写前端时已经很难用得上普通模板引擎了。因为这些框架都自带DOM渲染的功能,甚至由于虚拟DOM技术的存在,使得DOM渲染的效率比普通模板引擎更高。
但是在某些场景,仍然有用模板引擎的需求,比如写插件之类的(我就是在写插件的时候想到这个问题的-_-)。如果直接拼接HTML代码,会让整体代码的可读性变低;但是我又不想用现成的模板引擎,感觉有点太重了,本来写插件就想要轻便效率。
于是,我就有了一个处于直接拼接HTML代码和使用模板引擎之间的一个思路。(很可能我并不是第一个想到的,在这里只是探讨一下)
先贴代码
var template = function(temp, params, repeat){
var ret = "";
var repeat = repeat || 1;
for(var i = 0; i < repeat; i++){
ret += temp.replace(/{{[\w]+}}/g,function(a,b){
var value = params[a.replace(/[{}]/g,"")];
if(typeof value === "function"){
return value.call(this, i);
}else{
return value;
}
})
}
return ret;
}
因为一般用模板来生成HTML代码,最常用的功能就是遍历和条件判断,这个思路就是基于这一点出发的。
参数temp是模板字符串,例如'<div class="{{clas}}">{{prefix}}:{{num}}</div>',因为我用Vue比较多,所以这里用的也是{{}}。
参数repeat表示当前模板字符串需要重复的次数,比如传10的话,就会生成10个div。
参数params用来定义模板里的变量,例如:
{
"clas": function(index){
return index % 2 ? 'even' : 'odd';
},
"num": function(index){
return index + 1;
},
"prefix": "No"
}
变量名称一定要一一对应。
参数里可以定义常量,比如"prefix": "No",表示模板中的prefix变量会被替换为字符串No;
还可以定义成一个function,这个function接收当前遍历的index作为参数:
"num": function(index){
return index + 1;
}
返回值则会被替换到对应的模板变量中,比如这个num就会被替换成1到10。
在function里也可以再放入一个template,比如:
var temp = '<ul>{{lists}}</ul>';
var lists = '<li>{{content}}</li>';
var t = template(temp, {
"lists": function(){
return template(lists, {
"content": function(index){
return index % 2 ? '偶数' : '奇数';
}
}, 10);
}
});
一种轻便且灵活的js模板的思路的更多相关文章
- 调研js模板引擎
js模板引擎越来越多的得到应用,如今已经出现了几十种js模板引擎,国内各大互联网公司也都开发了自己的js模板引擎(淘宝的kissy template,腾讯的artTemplate,百度的baiduTe ...
- js模板引擎介绍搜集
js模板引擎越来越多的得到应用,如今已经出现了几十种js模板引擎,国内各大互联网公司也都开发了自己的js模板引擎(淘宝的kissy template,腾讯的artTemplate,百度的baiduTe ...
- JS模板引擎:tppl
全球最快的JS模板引擎:tppl 废话不多说,先上测试: 亲测请访问:[在线测试地址]单次结果不一定准确,请多测几次. tppl 的编译渲染速度是著名的 jQuery 作者 John Resig 开发 ...
- 浅析js模板引擎
js模板引擎越来越多的得到应用,如今已经出现了几十种js模板引擎,国内各大互联网公司也都开发了自己的js模板引擎(淘宝的kissy template,腾讯的artTemplate,百度的baiduTe ...
- 为什么要使用JS模板引擎
我之前在写一个输入联想控件的时候,改过好几个版本,每个版本不是因为性能不好就是因为代码凌乱而被推翻,最后用了understore模板引擎,效果有明显改善.整好这两天在研究互联网技术架构,发现很多的开发 ...
- doT js 模板引擎【初探】要优雅不要污
js中拼接html,总是感觉不够优雅,本着要优雅不要污,决定尝试js模板引擎. JavaScript 模板引擎 JavaScript 模板引擎作为数据与界面分离工作中最重要一环,越来越受开发者关注. ...
- 《Ext JS模板与组件基本知识框架图----模板》
最近在整理Ext JS的模板和组件,在参考<Ext JS权威指南>,<Ext JS Web应用程序开发指南>,<Ext JS API>等相关书籍后才写下这篇< ...
- 掌握js模板引擎
最近要做一个小项目,不管是使用angularjs还是reactjs,都觉得大材小用了.其实我可能只需要引入一个jquery,但想到jquery对dom的操作,对于早已习惯了双向绑定模式的我,何尝不是一 ...
- doT js模板入门
doT.js github地址: doT.js 官方站点 实例1:简单 <!DOCTYPE html> <html lang="en"> <head& ...
随机推荐
- sql 注入命令大全
1.判断有无注入点 ; and 1=1 and 1=2 2.猜表一般的表的名称无非是admin adminuser user pass password 等.. and 0<>(selec ...
- twisted学习之reactor
reactor是twisted框架里面一个很重要的抽象,它为我们实现了循环,所以我们不用再去实现循环了. reactor有如下特点: 1.reactor循环会一致运行下去,可以使用Ctrl+C或者相关 ...
- phpcms v9模版调用代码
首页调用栏目{pc:content action="category" siteid="$siteid" num="15" order=&q ...
- Intellij IDEA 2017集成MyBatis三剑客
MyBatis三剑客指的是:MyBatis-Generate.Mybatis Plus.MyBatis-PageHelper MyBatis-Generate 使用 Mybatis Generator ...
- phpcms和php格式化时间戳
用PHPCMS V9 建站时,经常会用到时间标签,它是通用标签调用-日期时间格式化,适用全站. 一.日期时间格式化显示: a\标准型:{date('Y-m-d H:i:s', $rs['inputti ...
- yii2.0修改默认的访问控制器
- 简单的视频采集demo
打算做个简单的聊天软件,其中一个我没做过的,就是视频采集. 在网上查了许久资料,终于搞清楚了dshow采集视频的流程 参考资料如下: https://msdn.microsoft.com/en-us/ ...
- Solr6.6 创建core
原文:https://github.com/x113773/testall/issues/7 1. 首先在solr-6.6.0目录运行命令,启动solr:`Linux: $ bin/solr star ...
- CSS3学习系列之背景相关样式(一)
新增属性: background-clip:指定背景的显示范围 background-origin:指定绘制背景图像时的起点 background-size:指定背景中图像的尺寸 background ...
- [leetcode-434-Number of Segments in a String]
Count the number of segments in a string, where a segment is defined to be a contiguous sequence of ...