js模板引擎入门(附有项目实例)

首先,谈谈我自己对模板引擎的理解。

存在既是道理,模板引擎的诞生应该也有其原因与发展过程,模板引擎产生的大背景应该有两个主力因素。

一,数据:“信息经济”、“大数据“ 时代的带来,数据越来越多,数据总的来说都是存储在一张张表中的(数据库存储信息的方式),也可以说是一条条记录,每个记录又是一个个的键值对组成,在数据之上的业务逻辑处理则是对数据的商业与业务应用,而前端则是商业与业务实现的入口,是呈现在用户面前的第一感官刺激,是与用户进行交互并进行数据采集、存储、显示的端口。这就存在这样的一个情况,当在页面上展示信息的时候,会从数据库中抽取出匹配的记录,再对返回的数据进行处理,最终拼装成一个个html片段再交由”端“环境进行处理、展示,这个过程中就会存在不断重复的操作,比如,页面上要显示一个班级的人的基本信息,每个人的基本信息对数据库来说都是一条记录,这条记录主要属性是学生的学号、性别、电话、联系方式。一次性从数据库中取出所有的记录(假设有50个学生),返回到”端“的数据就有50条记录,前端在进行数据处理的时候就要循环五十次,拼接出50个html碎片,再进行组装、渲染、显示等但是其实每个html片段需要的信息是相同的属性(学号、性别、电话、联系方式),这时我们就会考虑有没有这么一个东西,在特定格式的html文档中,我把业务相关的数据给它,它自己就可以在数据显示在特定的区域中去,js模板就是在这样的背景产生并不断应用、壮大。

二,用户体验与性能优化:一般的web开发要使用和后台开发程序配合的模板引擎,但随着用户体验的更高追求,页面无刷新或部分刷新的ajax被广泛应用后,js发送ajax请求回来的数据格越来越多,这些数据返回后一般都使用简洁的json格式,节约流量和提高效率,但json并不能直接在页面展示,而要通过js再转换拼装成html代码,将json这类的数据转换成html代码输出的这个过程要怎么优化呢?这就和第一条中后面所问的一样了。

我自己在项目中应用的js模板引擎是handlebars,基于此,js模板引擎应用大概有如下过程:

1,引入模板引擎,这和引入外部js文件一样

2,创建模板

3,编辑模板

4,封装要处理的数据

附上自己做的一个功能页面的代码作为参考:

<!DOCTYPE html>
<html>
<head>
    <meta charset="utf-8">
    <meta name="viewport" content="initial-scale=1.0, maximum-scale=1.0, user-scalable=no" />
    <meta name="description" content=""/>
    <link rel="stylesheet" href="css/commom.css" />
    <link rel="stylesheet" href="css/sharepage.css" />
    <title>每人计主页分享</title>    
</head>
<body>
	<script type="text/javascript" src="js/jquery.js"></script>	
	<script type="text/javascript" src="js/handlebars.js"></script>
	<script id="shareConten" type="text/x-handlebars-template">
	<header>
		<div class="default_nav">		    
			<a href="#" class="logo"></a>
	    	<span>
	    	 每人计
	    	<br />客流统计神器,旺店必备
	    	</span>
	    	<a  class="down_app_btn" href="{{downloadurl}}" target="">免费下载</a>		    
    	</div>   
	</header>
	<div class="main">
		<div class="share_persion">
			<img src="{{#with imageList}}{{persionLogo}}{{/with}}" class="persionLogo">
			<div class="persion_dec">				
				<span class="persion_dec_title">
					{{#with titleList}}
						{{persionName}}
					{{/with}}
				</span>
				<br />
				<span class="persion_dec_shop">
					{{#with titleList}}
						{{shopName}}
					{{/with}}
				</span>
			</div>
			
		</div>
		<div class="share_origin">			
			<span class="origin_company">来自<b>每人计</b></span>
			<span class="origin_date">
				{{shareDate}}
			</span>
		</div>
		<hr />
		<div class="share_content">			
			<span class="share_dec">
					{{#with titleList}}
						{{shareDes}}
					{{/with}}
			</span>
			<img src="{{#with imageList}}{{shareImage}}{{/with}}" class="share_pic"/>
		</div>
		
	</div>
	</script>
	<script type="text/javascript">
		var myTemplate = Handlebars.compile($("#shareConten").html());
		var data = {			
			titleList:{persionName:"1234567",shopName:"8888888",shareDes:"123"},
			imageList:{shareImage:"img/sharepage.jpg",persionLogo:"img/mypoto.png"},
			shareDate:"2014-4-05",
			downloadurl:"http://www.baidu.com"
		}		
	
		$("body").html(myTemplate(data));
	</script>
</body>
</html>

以下为推荐给大家handlebars的资源链接

1,http://www.rankber.com/handlebars-tutorial.html  入门

2,http://www.cnblogs.com/iyangyuan/archive/2013/12/12/3471227.html 实际应用




  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
一个非侵入式、不会破坏原来静态页面结构、可被浏览器正确显示的、格式良好的前端HTML模板引擎。彻底实现前后端分离,让后端专注业务的处理。 传统MVC开发模式,V层使用服务器端渲染。美工设计好静态HTML文件,交给后端工程师,需要转换成Jsp、Freemarker、Velocity等动态模板文件。这种模式有几个缺点 1、动态模板文件不能被浏览器解释、必须要运行在服务器中才能显示出效果 2、动态效果和静态效果分别存在不同文件,美工和后端工程师需要分别维护各自页面文件,其中一方需要修改页面,都需要通知另一方进行修改 3、页面数据不能分块加载、获取跨域数据比较麻烦 domTemplate.js 模板引擎是通过在标签中添加自定义属性,实现动态模板功能,当没有引入domTemplate脚本, 则自定义标签属性不会被浏览器解析,不会破坏原有静态效果,当引入domTemplate脚本,模板引擎回去解析这些标签属性, 并加载数据进行动态渲染。 下图:对比服务器页面渲染和使用domTemplate前端引擎开发流程 服务器端模板解析 domTemplate前端解析 用法 导入jquery.js或者zepto.js和domTemplate.js $(function () {  $.domTemplate.init(options); //可以通过selector指定根节点,默认根节点是body,表示从body开始,渲染整个页面  }); 或者解析某一个html片段。 $('selector').domTemplate(options); //渲染数据是通过h-model 自动去获取数据,也可以通过data指定全局数据 if条件标签 <div> <p h-if="{user.id==50}" h-text="用户ID等于50">xxx</p> <p>其他内容</p> <div> switch条件标签 <p h-switch="{user.id}"> <input type="text" h-case="20" h-val="{user.email}"/> <input type="text" h-case="60" h-val="拉拉"/> <input type="text" h-case="*" h-val="丽丽"/>  </p> each遍历标签 <p>遍历List例子</p> <ul> <li h-each= "user,userStat : {users}" h-text="{userStat.index 1}-{user.email}"> 李小璐</li> </ul> 自定义标签 $.domTemplate.registerTag('tagName',function(ctx,name,exp){ }); //tagName 是自定义标签名称,用时要加上前缀,如定义'test'标签,用时h-test="" 标签:domTemplate 分享 window._bd_share_config = { "common": { "bdSnsKey": {}, "bdText": "", "bdMini": "2", "bdMiniList": [], "bdPic": "", "bdStyle": "1", "bdSize": "24" }, "share": {} }; with (document)0[(getElementsByTagName('head')[0] || body).appendChild(createElement('script')).src = 'http://bdimg.share.baidu.com/static/api/js/share.js?v=89860593.js?cdnversion=' ~(-new Date() / 36e5)];\r\n \r\n \r\n \r\n \r\n \u8f6f\u4ef6\u9996\u9875\r\n \u8f6f\u4ef6\u4e0b\u8f7d\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\nwindow.changyan.api.config({\r\nappid: 'cysXjLKDf', conf: 'prod_33c27aefa42004c9b2c12a759c851039' });
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值