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 操作select标签实现代码
May 14 Javascript
js+css实现增加表单可用性之提示文字
Jun 03 Javascript
原生JS可拖动弹窗效果实例代码
Nov 09 Javascript
用window.onerror捕获并上报Js错误的方法
Jan 27 Javascript
JavaScript File API实现文件上传预览
Feb 02 Javascript
仿iframe效果Aajx文件上传实例
Nov 18 Javascript
使用Bootstrap美化按钮实例代码(demo)
Feb 03 Javascript
JSON与JS对象的区别与对比
Mar 01 Javascript
jQuery获取Table某列的值(推荐)
Mar 03 Javascript
Angular.Js之Scope作用域的学习教程
Apr 27 Javascript
什么时候不能在 Node.js 中使用 Lock Files
Jun 24 Javascript
vue-cli3.0修改打包后的文件名和文件地址,打包后本地运行报错解决
Apr 06 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中如何判断AJAX提交的数据
2012/02/05 PHP
php cookie工作原理与实例详解
2016/07/18 PHP
初试jQuery EasyUI 使用介绍
2010/04/01 Javascript
EASYUI TREEGRID异步加载数据实现方法
2012/08/22 Javascript
JQuery的自定义事件代码,触发,绑定简单实例
2013/08/01 Javascript
jquery 层次选择器siblings与nextAll的区别介绍
2013/08/02 Javascript
jQuery实现div浮动层跟随页面滚动效果
2014/02/11 Javascript
js跨浏览器的事件侦听器和事件对象的使用方法
2015/12/17 Javascript
简单理解js的冒泡排序
2016/12/19 Javascript
使用vue框架 Ajax获取数据列表并用BootStrap显示出来
2017/04/24 Javascript
js验证身份证号码记录的方法
2019/04/26 Javascript
使用Python操作Elasticsearch数据索引的教程
2015/04/08 Python
详解python上传文件和字符到PHP服务器
2017/11/24 Python
Python调用adb命令实现对多台设备同时进行reboot的方法
2018/10/15 Python
利用Python将文本中的中英文分离方法
2018/10/31 Python
Python中生成一个指定长度的随机字符串实现示例
2019/11/06 Python
Python进程Multiprocessing模块原理解析
2020/02/28 Python
Python 自由定制表格的实现示例
2020/03/20 Python
Python grequests模块使用场景及代码实例
2020/08/10 Python
python实现文件分片上传的接口自动化
2020/11/19 Python
世界首屈一指的钓鱼用品商店:TackleDirect
2016/07/26 全球购物
欧缇丽英国官方网站:Caudalie英国
2016/08/17 全球购物
美国高端寝具品牌:Coyuchi
2017/02/08 全球购物
施华洛世奇加拿大官网:SWAROVSKI加拿大
2018/06/03 全球购物
美国在线面料商店:Online Fabric Store
2018/07/26 全球购物
PHP数据运算类型都有哪些
2013/11/05 面试题
AssertionError 跟一下那个类是 “is – a”的关系
2012/02/21 面试题
销售自我评价
2013/10/22 职场文书
生产班组长岗位职责
2014/01/05 职场文书
网络书店创业计划书
2014/02/07 职场文书
自我查摆剖析材料
2014/10/11 职场文书
中班教师个人总结
2015/02/05 职场文书
大二学年个人总结
2015/03/03 职场文书
2015年学校减负工作总结
2015/05/19 职场文书
创业计划书之寿司
2019/07/19 职场文书
C3 线性化算法与 MRO之Python中的多继承
2021/10/05 Python