JavaScript模板引擎artTemplate.js——为什么使用模板引擎?
作为一个工作一年的菜鸟,在公司做了几个外包项目,也接触到了不同形式的web开发。其实也没多少,就是javaweb开发和HTML5移动开发,这两者在页面展示的时候的解决方案还是有所不同的。
1、vo+el表达式
在javaweb开发中,我们使用的是SSM框架(Spring,SpringMVC,Mybatis)。一些页面的跳转,我们通过返回SpringMVC的ModelAndView来实现,并采用这种方式来展示页面。
其基本思想是:后端构造实体类,这个实体类里面包含目标页面所需要的所有属性,这个实体类由一张表或多张表中对应的字段组成,俗称vo(value object)。属性的值可以是String,int,Map,List等等,也就是说vo里面又可以套vo,因此这种方式非常灵活好用。
但是这种方式,把要展示的内容和控制混杂在一起,html里边混杂了大量el控制标签,很不美观。并且,利用el表达式生成html代码,这是一个在服务器端执行的动作,在服务器端解析完成之后,才发送到客户端浏览器上,这样做会占用大量服务器资源,而且速度缓慢。
示例如下:
<c:forEach var="advert" items="${advertInfo.getList()}"> <tr class="text-c"> <td>${advert.advert_id}</td> <td>${advert.advert_name}</td> <td><img src="${advert.advert_img}" width="100" alt="广告图片"/></td> <td>${advert.advert_url}</td> <td> <c:if test="${advert.advert_usable eq 0}"><span class="usable-close">不可用</span></c:if> <c:if test="${advert.advert_usable eq 1}"><span class="usable-start">可用</span></c:if> </td> <td>${advert.advert_index}</td> <td><fmt:formatDate value="${advert.create_time}" pattern="yyyy-MM-dd"/></td> <td class="td-manage"> <c:if test="${advert.advert_usable eq 0}"> <a class="ml-5 advert-usable" data-state="1" title="开启" href="javascript:;"><span class="Hui-iconfont Hui-iconfont-shenhe-tongguo"></span></a> </c:if> <c:if test="${advert.advert_usable eq 1}"> <a class="ml-5 advert-usable" data-state="0" title="关闭" href="javascript:;"><span class="Hui-iconfont Hui-iconfont-shenhe-tingyong"></span></a> </c:if> <a class="ml-5 advert-delete" title="删除" href="javascript:;"><span class="Hui-iconfont Hui-iconfont-del2"></span></a> </td> </tr> </c:forEach>
2、ajax+JSON拼接html
HTML5开发移动端界面,我们采用这种方式进行前后端交互,这也是目前比较热门一种方式。
其基本思想是:通过ajax发起请求,服务端返回一个json字符串,这个json字符串中包含前端需要展示的信息,前端拿到json串后,通过拼接html来完成界面的展示。
示例如下:
$.ajax({ url: "localhost:8080/demo/advertList.do", type: "post", async: true, dataType: "json", success: function(data) { var content = ""; for (var i = 0, len = data.length; i < len; i++) { content += '<div class="mui-slider-group mui-slider-loop">' + '<div class="mui-slider-item mui-slider-item-duplicate"><a><img name="' + res[i].advertUrl + '" class="img_slider" src="' + res[i].advertName + '" /></a></div>' + '<div class="mui-slider-item"><img name="' + res[i].advertUrl + '" class="img_slider" src="' + res[i].advertName + '" /></div>' + '<div class="mui-slider-item"><a><img name="' + res[i].advertUrl + '" class="img_slider" src="' + res[i].advertName + '" /></a></div>' + '<div class="mui-slider-item"><a><img name="' + res[i].advertUrl + '" class="img_slider" src="' + res[i].advertName + '" /></a></div>' + '<div class="mui-slider-item mui-slider-item-duplicate"><a><img name="' + res[i].advertUrl + '" class="img_slider" src="' + res[i].advertName + '" /></a></div>' + '</div><div class="mui-slider-indicator"><div class="mui-indicator mui-active"></div>' + '<div class="mui-indicator"></div><div class="mui-indicator"></div></div>'; } document.getElementById("ul_list").innerHTML = content; }, error: function(xhr, type, errorThrown) { console.log(type); } });
这样做的好处就是,服务端只负责返回数据,而页面的展示由前端来完成,服务器承受的压力明显减少。但是缺点也很明显,那就是字符串中拼接了大量的html标签,可维护性极低。拼接html,打乱了html原有的层次结构,根本看不出来原来的结构,整个就是一坨字符串堆积在那里。
3、javascript模板引擎
javascript模板引擎可以很好的保留html原有格式,并且保留js构建html速度快的特点。我们之前做移动端开发,了解了几款模板引擎后,选择了artTemplate.js,因为他更加符合我们的需求并且性能相对较高。
示例如下:
html部分
<script type="text/html" id="advert_tmpl"> {{each list as value i}} <div class="mui-slider-group mui-slider-loop"> <div class="mui-slider-item mui-slider-item-duplicate"> <a><img name="{{value.advertName}}" lass="img_slider" src="{{value.advertUrl}}" />{{value.advertName}}</a> </div> </div> {{/each}} </script>
javascript部分:
var advertList = template("advert_tmpl", data); document.getElementById("ul_list").innerHTML = advertList;
可以很明显地看到,采用javascript模板引擎来实现页面的展示。不仅html结构清晰,而且javascript部分只需要处理逻辑,不需要进行过多的html拼接操作。而且artTemplate.js文件只有6KB左右,同时具有良好的可扩展性,是一款不可多得的javascript模板引擎。
JavaScript模板引擎artTemplate.js——为什么使用模板引擎?的更多相关文章
- JavaScript模板引擎artTemplate.js——如何引入模板引擎?
artTeamplate.js在github上的地址:artTemplate性能卓越的js模板引擎 引入模板引擎,就是引入外部javascript啦,并且artTemplate.js不依赖其他第三方库 ...
- JavaScript模板引擎artTemplate.js——引入子模板
之前的例子都是单一结构的对象,如果遇到复杂对象结构,我们可以通过引入子模板来实现html的渲染. 依旧以之前的数据作为例子: <div id="content">< ...
- JavaScript模板引擎artTemplate.js——结语
再次首先感谢模板的作者大神,再次放出github的地址:artTemplate性能卓越的js模板引擎 然后感谢博客园的一位前辈,他写的handlebars.js模板引擎教程,对我提供了很大的帮助,也是 ...
- JavaScript模板引擎artTemplate.js——两种方法实现性别的判定
template.helper(name, callback) name:必传,辅助事件的名称. callback:必传,辅助事件的回调函数. return:undefined 所谓的辅助事件,主要用 ...
- JavaScript模板引擎artTemplate.js——template.compile()方法
template.compile(source, options) source:必传,渲染模板的内容. options:可选,通常不传.(其实是我还没研究明白) return:一个渲染函数. 示例如 ...
- JavaScript模板引擎artTemplate.js——template()方法
template(id, data)方法: id:必传,渲染模板的id. data:可选,一个Object对象. return:传data—>渲染完成html代码:不传data—>一个渲染 ...
- JavaScript模板引擎artTemplate.js——是否编码输出html字符
template.config(name, value)方法用于更改引擎的默认配置. 其中字段escape,类型为boolean,默认为true. 首先,我们不修改配置信息输出一段带有html标签的字 ...
- JavaScript模板引擎artTemplate.js——template.helper()方法
上一篇文章我们已经讲到了helper()方法,但是上面的例子只是一个参数的写法,如果是多个参数,写法就另有区别了. <div id="user_info"></d ...
- 前端模板引擎artTemplate.js
. 关于artTemplate模板引擎的详细原理请移步高性能JavaScript模板引擎原理解析,本文只探讨如何使用.初学前端的人一般对于绑定数据都是使用原生js或者jquery来拼接字符串,此为ha ...
随机推荐
- DOM节点属性
节点属性 在文档对象模型 (DOM) 中,每个节点都是一个对象.DOM 节点有三个重要的属性 : 1. nodeName : 节点的名称 2. nodeValue :节点的值 3. nodeType ...
- 翻译:常见问题——ABAP Development Tools for Eclipse
ABAP Development Tools for Eclipse(简称ADT)是一个基于Eclipse的全新ABAP IDE,这篇文档试图回答有关ADT的最重要的常见问题.这只是一个开始,如果你对 ...
- 使用独立模式安装Sharepoint Server 2013出现创建示例数据错误的解决方案
使用独立模式安装Sharepoint Server 2013,允许配置向导到第8步创建示例数据时,出错了! Exception: System.ArgumentException: The SDDL ...
- JSPatch使用小记
hotfix的作用众所周知,Android和iOS都有各自的技术,但是相比Android的当天发布来说(如果你们的项目不需要灰度),iOS热更新的意义更加重大.因为iOS审核周期长不说,而且运气不好会 ...
- 基本动画CABasicAnimation - 完成之后闪回初始状态
基本动画CABasicAnimation 结束之后,默认闪回初始状态,那怎么解决呢? position需要设备两个属性: // MARK: - 结束后不要闪回去 anim.removedOnCompl ...
- Masonry使用注意事项
1 理解自身内容尺寸约束与抗压抗拉 自身内容尺寸约束:一般来说,要确定一个视图的精确位置,至少需要4个布局约束(以确定水平位置x.垂直位置y.宽度w和高度h).但是,某些用来展现内容的用户控件,例如文 ...
- 开发者调试工具Chrome Workspace
Workspace是个什么样的东西呢?他能够在开发者工具中调试修改js或者css同时自动保存文件,能够避免开发人员在工具中调试好,再到编辑器中修改一次代码的重复操作,能够提高一定的效率 配置Chrom ...
- Jenkins 2.0 要来了
Jenkins 在2016/02/29日发布了2.0 alpha版本,https://jenkins-ci.org/2.0/ , 改进界面,向前兼容,增加新功能: 1.初始化时可以选择推荐插件或自定义 ...
- 为什么基于TCP UDP服务的一些简单服务端口号都是奇数
TCP是有NCP(网络控制协议)派生出来的,NCP是单工的,通信需要两个链接,所以会预留奇偶端口号.当TCP/UDP成为传输层协议,每个程序只是用一个端口号,且使用奇端口号.
- oradebug/strace/pstack等分析数据库性能问题系列一
对于性能问题或者一些比较奇怪妖异的问题,有很多点可以着手去分析. 准备写一个系列关于用ash/dba_hist_active_sess_history,用oradebug,用linux命令strace ...