JavaScript模板引擎 - Elapse

背景:

用于公司项目,产品诉求:

1,可编译,高性能。

2,简单/灵活的include

3,简洁的语法

 

故决定自行开发一个引擎名为:Elapse

 

 

需求样例:渲染一个数据表格:


模板:

				<table>
					<thead>
						<tr>
							<th>
								姓名
							</th>
							<th>
								性别
							</th>
							<th>
								生日
							</th>
						</tr>
					</thead>
					<tbody>
						${forarr #userList as user}
							<tr>
								<td>
									${user.name}
								</td>
								<td>
									${user.sex}
								</td>
								<td>
									${user.birthday}
								</td>
							</tr>
						${/forarr}
					</tbody>
				</table>

 

注入到模板的数据:

				{
					"userList": [
						{
							"name": "小明",
							"sex": "男",
							"birthday": "1989-10-29"
						},
						{
							"name": "小红",
							"sex": "女",
							"birthday": "1989-10-1"
						}
					]
				}

  

渲染代码:

				var template = $("#template").val();
				var json = $.parseJSON($("#json").val());
				//渲染代码开始
				Elapse.renderFromSource({
					source: template,
					data: json,
					complete: function (text) {
						$("#result").html(text);
					}
				});
				//渲染代码结束

 

渲染结果:

 

				<table>
					<thead>
						<tr>
							<th>
								姓名
							</th>
							<th>
								性别
							</th>
							<th>
								生日
							</th>
						</tr>
					</thead>
					<tbody>
						
							<tr>
								<td>
									小明
								</td>
								<td>
									男
								</td>
								<td>
									1989-10-29
								</td>
							</tr>
						
							<tr>
								<td>
									小红
								</td>
								<td>
									女
								</td>
								<td>
									1989-10-1
								</td>
							</tr>
						
					</tbody>
				</table>
			 
 

简单的变量访问机制:

 

	访问用户变量:${#userList} ${#userList.length}
	访问JS全局变量:${@location.href}
	访问系统生成的临时变量: ${curUser}
 

 

为常用需求优化的关键字:

循环数组:

					${forarr #userList as user}
						列表长度为:${#userList.length},现在循环到了${user#index},值:${user}
					${/forarr}

  

循环对象:

					${foreach #colors as color}
						颜色${color#key}的十六进制值为:${color}
					${/foreach}
  

  单纯循环:

					循环十次:
					${loop 10 as ls}
						循环步进为${ls#step},循环到了${ls},循环到${ls#over}即结束。
					${/loop}
					
					循环十次,每次递增2:
					${loop 10,2 as ls}
						循环步进为${ls#step},循环到了${ls},循环到${ls#over}即结束。
					${/loop}
					
					循环十次,每次递增2,初始值为5:
					${loop 10,2,5 as ls}
						循环步进为${ls#step},循环到了${ls},循环到${ls#over}即结束。
					${/loop}

 

while循环:

					${while true}
						一次循环立马退出
						${break}
					${/while}

if语句:

					${if #userList.length == 3}
						用户列表长度为3
					${/if}

 

else语句:

					${if #userList.length == 3}
						用户列表长度为3
					${else}
						用户列表长度不为3
					${/if}		
  

elseif语句:

					${if #userList.length == 3}
						用户列表长度为3
					${elseif #userList.length == 0}
						用户列表长度为0
					${else}
						用户列表长度不为3
					${/if}

 

switch语句:

					${switch #userList.length}
						${case 0}
							用户列表长度为空。
							${break}
						${case 1}
							用户列表长度为1。
							${break}
						${case 2}
							用户列表长度为2。
							${break}
						${case 3}
							用户列表长度为3。
							${break}
						${default}
							神马啊。。。
					${/switch}
 

定义变量:

					将一个变量赋null:
					${eval #userList[0] = null}
					
					定义一个变量,必须定义在#下:
					${eval #myvar = "hello world!"}

 

给模板命名(注册模板):

					设置模板的name为“userlist”
					${name userlist}
 

简单的模板包含:

					包含名称为“userlist”的模板:
					${include userlist}
					
					包含名称为“userlist”的模板,并且向其注入一些数据:
					${include userlist:#userList}

 

系统如何找到包含的模板?:

					Elapse.setLoader({
						loader: function (name, setter) {	
							//设置loader函数,当系统需要的模板未注册的话,会调用此方法。
							//name: 需要的模板的名称
							//setter: 接收模板方法。
							//定义你的获取方式:来自dom、来自远程。。。我这里是来自远程。  
							$.ajax({
								url: "/getTemplate",
								data: "name=" + name,
								type: "get",
								dataType: "text",
								success: function (source) {
									setter(source);
								}
							});
						}
					});
					
					//你只需要满足loader的调用即可,只有当以上代码的“setter”参数接收了模板源文件,系统才认为得到了此模板。你对模板加载大可放心,一切都由引擎调度好了。

 

最终产品特点

        1,语法简单。由于我们是基于JS语法,并做增强,所以学习成本低。且功能强大。

          2,可编译,高性能。经测试,编译后的运行效率和市面上大部分模板引擎效率持平,或更高。

          3,简单的include。只需配置一个loader(加载器),便可支持各种模板来源,并自动从来源获取模板。

 


详细文档见附件,打开guide.html即文档,勿用ie查看,文档样式不兼容。

项目开源,github:https://github.com/yinhang/Elapse

 

欢迎你的使用,并期待加入此项目一同开发。

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值