JSON JQUERY模板实现说明


Posted in Javascript onJuly 03, 2010

可是在客户端再现数据也是一个不小的问题,用javascript处理经常会遇到很繁琐的事.尤其大批量具有相同结构的数据,例如表格,处理方式不尽如意.如果能有一个模板控件,就像服务器端asp.net Gridview或者repeater一样的东西就好很多.最近看到一个非常优秀的解决方案,让我在使用方便的同时不得不为作者的精巧设计而作一番感叹.该解决方案用了区区二十几行代码,实现了别人要用几十甚至上百K的js库所做的工作.它就是John Resig 的 Microtemplating engine.大师Rick Strahl有一篇文章专门对此作了详细讲述(Client Templating with Jquery).我在这里把最核心部分提取出来以方便国人学习。

下面一段程序就是microtemplating engine.

var _tmplCache = {} 
this.parseTemplate = function(str, data) { 
/// <summary> 
/// Client side template parser that uses <#= #> and <# code #> expressions. 
/// and # # code blocks for template expansion. 
/// NOTE: chokes on single quotes in the document in some situations 
/// use ’ for literals in text and avoid any single quote 
/// attribute delimiters. 
/// </summary> 
/// <param name="str" type="string">The text of the template to expand</param> 
/// <param name="data" type="var"> 
/// Any data that is to be merged. Pass an object and 
/// that object's properties are visible as variables. 
/// </param> 
/// <returns type="string" /> 
var err = ""; 
try { 
var func = _tmplCache[str]; 
if (!func) { 
var strFunc = 
"var p=[],print=function(){p.push.apply(p,arguments);};" + 
"with(obj){p.push('" + str.replace(/[\r\t\n]/g, " ") 
.replace(/'(?=[^#]*#>)/g, "\t") 
.split("'").join("\\'") 
.split("\t").join("'") 
.replace(/<#=(.+?)#>/g, "',$1,'") 
.split("<#").join("');") 
.split("#>").join("p.push('") 
+ "');}return p.join('');"; 
//alert(strFunc); 
func = new Function("obj", strFunc); 
_tmplCache[str] = func; 
} 
return func(data); 
} catch (e) { err = e.message; } 
return "< # ERROR: " + err.htmlEncode() + " # >"; 
}

如何使用:
parseTemplate($("#ItemTemplate").html(),{ name: "rick", address: { street: "32 kaiea", city: "paia"} } );

上面程序所用的模板:

<script id="ItemTemplate" type="text/html"><div><div><#= name #></div><div><#= address.street #></div> </div></script>

如果想用循环:

$.each(dataarray,function(index,dataItem){ 
parseTemplate($("#ItemTemplate").html(), dataItem ); 
})

很简单很精巧吧?
Javascript 相关文章推荐
js控制页面控件隐藏显示的两种方法介绍
Oct 09 Javascript
String.prototype实现的一些javascript函数介绍
Nov 22 Javascript
Javascript表单验证要注意的事项
Sep 29 Javascript
jQuery实现带滚动导航效果的全屏滚动相册实例
Jun 19 Javascript
浅谈jQuery中setInterval()方法
Jul 07 Javascript
微信小程序 wxapp画布 canvas详细介绍
Oct 31 Javascript
前端实现文件的断点续传(前端文件提交+后端PHP文件接收)
Nov 04 Javascript
JS轮播图中缓动函数的封装
Nov 25 Javascript
React中的render何时执行过程
Apr 13 Javascript
使用Vue自定义指令实现Select组件
May 24 Javascript
修改vue+webpack run build的路径方法
Sep 01 Javascript
如何实现vue的tree组件
Dec 03 Vue.js
jquery.boxy插件的iframe扩展代码
Jul 02 #Javascript
JQuery AJAX提交中文乱码的解决方案
Jul 02 #Javascript
IE本地存储userdata的一个bug说明
Jul 01 #Javascript
UserData用法总结 lanyu出品
Jul 01 #Javascript
javascript 函数调用的对象和方法
Jul 01 #Javascript
this和执行上下文实现代码
Jul 01 #Javascript
jquery.validate使用攻略 第五步 正则验证
Jul 01 #Javascript
You might like
php面向对象 字段的声明与使用
2012/06/14 PHP
php实现快速排序法函数代码
2012/08/27 PHP
Yii2实现跨mysql数据库关联查询排序功能代码
2017/02/10 PHP
Array, Array Constructor, for in loop, typeof, instanceOf
2011/09/13 Javascript
基于jquery实现控制经纬度显示地图与卫星
2013/05/20 Javascript
javascript使用location.search的示例
2013/11/05 Javascript
JavaScript中Math对象方法使用概述
2014/01/02 Javascript
js实现div拖动动画运行轨迹效果代码分享
2015/08/27 Javascript
基于JavaScript实现瀑布流布局(二)
2016/01/26 Javascript
js实现的下拉框二级联动效果
2016/04/30 Javascript
BootStrap 智能表单实战系列(五) 表单依赖插件处理
2016/06/13 Javascript
JS判断日期格式是否合法的简单实例
2016/07/11 Javascript
javascript 的变量、作用域和内存问题
2017/04/19 Javascript
Vue2.5通过json文件读取数据的方法
2018/02/27 Javascript
微信小程序用户信息encryptedData详解
2018/08/24 Javascript
[03:10]超级美酒第四天 fy拉比克秀 大合集
2018/06/05 DOTA
python 多进程通信模块的简单实现
2014/02/20 Python
Python查询IP地址归属完整代码
2017/06/21 Python
python中使用正则表达式的连接符示例代码
2017/10/10 Python
python实现在IDLE中输入多行的方法
2018/04/19 Python
python使用代理ip访问网站的实例
2018/05/07 Python
Python基于递归和非递归算法求两个数最大公约数、最小公倍数示例
2018/05/21 Python
Python+PyQT5的子线程更新UI界面的实例
2019/06/14 Python
python 整数越界问题详解
2019/06/27 Python
Pandas透视表(pivot_table)详解
2019/07/22 Python
Python实现猜年龄游戏代码实例
2020/03/25 Python
详解Python多线程下的list
2020/07/03 Python
python 解决selenium 中的 .clear()方法失效问题
2020/09/01 Python
Under Armour美国官网:美国知名高端功能性运动品牌
2016/09/05 全球购物
生日主持词
2014/03/20 职场文书
捐款倡议书
2014/04/14 职场文书
建设工地安全标语
2014/06/07 职场文书
学习党代会心得体会
2014/09/05 职场文书
2015年出纳工作总结与计划
2015/05/18 职场文书
安全生产奖惩制度
2015/08/06 职场文书
使用Python脚本对GiteePages进行一键部署的使用说明
2021/05/27 Python