一种轻便且灵活的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& ...
随机推荐
- java io 流
Java流操作有关的类或接口: Java流类图结构: 流的概念和作用 流是一组有顺序的,有起点和终点的字节集合,是对数据传输的总称或抽象.即数据在两设备间的传输称为流,流的本质是数据传输,根据数据传输 ...
- [0] TFS 分支/标签
比较常见的版本控制分支策略有三种:不稳定主干策略.稳定主干策略.敏捷发布策略. 下面是对这几种策略的摘录: 不稳定主干策略 使用用主干作为新功能开发主线,分支用作发布. 被广泛的应用于开源项目. 比较 ...
- 转 使用HAProxy,PHPRedis,和MySQL支撑10亿请求每周架构细节
[编者按]在公司的发展中,保证服务器的可扩展性对于扩大企业的市场需要具有重要作用,因此,这对架构师提出了一定的要求.Octivi联合创始人兼软件架构师Antoni Orfin将向你介绍一个非常简单的架 ...
- jquery.qrcode.min.js(支持中文转化二维码)
详情请看:http://www.ncloud.hk/%E6%8A%80%E6%9C%AF%E5%88%86%E4%BA%AB/jqueryqrcodeminjs/ 今天还是要讲一下关于二维码的知识,前 ...
- jenkins管理员密码登录不了
1.密码管理员密码,如何修改 进入/var/jenkins_home/users/admin目录下修改config.xml文件: 以下密码是admin <hudson.security.Huds ...
- 【踩坑记录】记一次MySQL主从复制延迟的坑
最近开发中遇到的一个MySQL主从延迟的坑,记录并总结,避免再次犯同样的错误. 情景 一个活动信息需要审批,审批之后才能生效.因为之后活动要编辑,编辑后也可能触发审批,审批中展示的是编辑前的活动内容, ...
- 简谈java 中的 继承和多态
继承(extends) : 1:object 是所有类的父(基)类. 2:子类继承父类所有的内容除了(private修饰的和构造方法). 3:子类在手动创建构造方法时,必须调用父类构造方法. 4:在J ...
- jquery让页面滚动条top,滚动条 顶部
jquery让页面滚动条top,滚动条 顶部$(document).scrollTop(0);
- 两种代理模式(JDK和Cglib)实例
CGlib代理模式: package CGLIB; import java.lang.reflect.Method; import JDK.Test; import net.sf.cglib.prox ...
- 【Android Developers Training】 27. 序言:和其它应用交互
注:本文翻译自Google官方的Android Developers Training文档,译者技术一般,由于喜爱安卓而产生了翻译的念头,纯属个人兴趣爱好. 原文链接:http://developer ...