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 相关文章推荐
jquery控制左右箭头滚动图片列表的实例
May 20 Javascript
js导出格式化的excel 实例方法
Jul 17 Javascript
Asp.Net alert弹出提示信息的几种方法总结
Jan 29 Javascript
jQuery中ajax的get()方法用法实例
Dec 26 Javascript
JS实现自动切换文字的导航效果代码
Aug 27 Javascript
理解JS事件循环
Jan 07 Javascript
解析微信JS-SDK配置授权,实现分享接口
Dec 09 Javascript
动态统计当前输入内容的字节、字符数的实例详解
Oct 27 Javascript
微信小程序项目实践之九宫格实现及item跳转功能
Jul 19 Javascript
JS数组求和的常用方法总结【5种方法】
Jan 14 Javascript
layui下拉框获取下拉值(select)的例子
Sep 10 Javascript
js实现列表按字母排序
Aug 11 Javascript
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中使用imagick实现把PDF转成图片
2015/01/26 PHP
PHP验证码生成原理和实现
2016/01/24 PHP
php设计模式之模板模式实例分析【星际争霸游戏案例】
2020/03/24 PHP
JavaScript 格式字符串的应用
2010/03/29 Javascript
Jquery Select操作方法集合脚本之家特别版
2010/05/17 Javascript
JavaScript初学者应注意的七个细节详细介绍
2012/12/27 Javascript
extjs4 treepanel动态改变行高度示例
2013/12/17 Javascript
jquery如何通过name名称获取当前name的value值
2013/12/20 Javascript
JavaScript中数组成员的添加、删除介绍
2014/12/30 Javascript
深入了解JavaScript中的Symbol的使用方法
2015/07/28 Javascript
微信小程序 获取设备信息 API实例详解
2016/10/02 Javascript
JS IOS/iPhone的Safari浏览器不兼容Javascript中的Date()问题如何解决
2016/11/11 Javascript
JS实现的DIV块来回滚动效果示例
2017/02/07 Javascript
vue中用动态组件实现选项卡切换效果
2017/03/25 Javascript
基于vue+ bootstrap实现图片上传图片展示功能
2017/05/17 Javascript
Angularjs实现多图片上传预览功能
2018/07/18 Javascript
[01:05:32]DOTA2上海特级锦标赛主赛事日 - 3 败者组第三轮#1COL VS Alliance第一局
2016/03/04 DOTA
[41:08]TNC vs VG 2018国际邀请赛小组赛BO2 第一场 8.16
2018/08/17 DOTA
python 将字符串转换成字典dict
2013/03/24 Python
Python修改MP3文件的方法
2015/06/15 Python
python计算圆周率pi的方法
2015/07/11 Python
python 实现一次性在文件中写入多行的方法
2019/01/28 Python
Python的高阶函数用法实例分析
2019/04/11 Python
numpy.random.shuffle打乱顺序函数的实现
2019/09/10 Python
flask 实现token机制的示例代码
2019/11/07 Python
python向图片里添加文字
2019/11/26 Python
python 使用elasticsearch 实现翻页的三种方式
2020/07/31 Python
印度尼西亚在线时尚购物网站:ZALORA印尼
2016/08/02 全球购物
Avène雅漾美国官方网站:敏感肌肤护理专家
2016/10/24 全球购物
卡塔尔航空官方网站:Qatar Airways
2017/02/08 全球购物
德国电子商城:ComputerUniverse
2017/04/21 全球购物
Artist Guitars新西兰:乐器在线商店
2017/09/17 全球购物
师德师风承诺书
2014/05/23 职场文书
金融管理专业求职信
2014/07/10 职场文书
用golang如何替换某个文件中的字符串
2021/04/25 Golang
Javascript设计模式之原型模式详细
2021/10/05 Javascript