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 实现的全选和反选
Apr 15 Javascript
解读JavaScript中 For, While与递归的用法
May 07 Javascript
DOM基础教程之使用DOM
Jan 19 Javascript
JS使用cookie实现DIV提示框只显示一次的方法
Nov 05 Javascript
jquery实现全选、反选、获得所有选中的checkbox
Sep 13 Javascript
javascript实现粘贴qq截图功能(clipboardData)
May 29 Javascript
浅谈angular2的http请求返回结果的subcribe注意事项
Mar 01 Javascript
JS实现页面打印功能
Mar 16 Javascript
JS限制输入框输入的实现代码
Jul 02 Javascript
微信小程序实现日期格式化和倒计时
Nov 01 Javascript
JS图片懒加载的优点及实现原理
Jan 10 Javascript
不依任何赖第三方,单纯用vue实现Tree 树形控件的案例
Sep 21 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
咖啡豆的最常见发酵处理方法,详细了解一下
2021/03/03 冲泡冲煮
Bo-Blog专用的给Windows服务器的IIS Rewrite程序
2007/08/26 PHP
openPNE常用方法分享
2011/11/29 PHP
php读取富文本的时p标签会出现红线是怎么回事
2014/05/13 PHP
Laravel框架在本地虚拟机快速安装的方法详解
2018/06/11 PHP
ThinkPHP 5.1 跨域配置方法
2019/10/11 PHP
增强的 JavaScript 的 trim 函数的代码
2007/08/13 Javascript
javascript parseInt与Number函数的区别
2010/01/21 Javascript
关于Mozilla浏览器不支持innerText的解决办法
2011/01/01 Javascript
javascript动态加载三
2012/08/22 Javascript
基于jquery库的tab新形式使用
2012/11/16 Javascript
JSON语法五大要素图文介绍
2012/12/04 Javascript
jQuery EasyUI提交表单验证
2016/07/19 Javascript
JS实现隐藏同级元素后只显示JS文件内容的方法
2016/09/04 Javascript
js中string和number类型互转换技巧(分享)
2016/11/28 Javascript
node.js中cluster的使用教程
2017/06/09 Javascript
VUE 使用中踩过的坑
2018/02/08 Javascript
浅谈开发eslint规则
2018/10/01 Javascript
让 babel webpack vue 配置文件支持智能提示的方法
2019/06/22 Javascript
Vue+Koa2+mongoose写一个像素绘板的实现方法
2019/09/10 Javascript
Javascript 类型转换、封闭函数及常见内置对象操作示例
2019/11/15 Javascript
Python学习之asyncore模块用法实例教程
2014/09/29 Python
Python+树莓派+YOLO打造一款人工智能照相机
2018/01/02 Python
Python检查和同步本地时间(北京时间)的实现方法
2018/12/03 Python
selenium+python自动化测试之使用webdriver操作浏览器的方法
2019/01/23 Python
python实现词法分析器
2019/01/31 Python
TensorFlow2.X结合OpenCV 实现手势识别功能
2020/04/08 Python
python实现每天自动签到领积分的示例代码
2020/08/18 Python
使用Filters滤镜弥补CSS3的跨浏览器问题以及兼容低版本IE
2013/01/23 HTML / CSS
校园餐饮创业计划书
2014/01/10 职场文书
社区七一党员活动方案
2014/01/25 职场文书
六查六看自查材料
2014/02/17 职场文书
中文教师求职信
2014/02/22 职场文书
大学军训感言200字
2014/02/26 职场文书
应用外语系自荐信
2014/06/26 职场文书
学雷锋献爱心活动总结
2015/05/11 职场文书