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 相关文章推荐
JavaScript在IE和Firefox(火狐)的不兼容问题解决方法小结
Apr 13 Javascript
设置iframe的document.designMode后仅Firefox中其body.innerHTML为br
Feb 27 Javascript
JQuery获取或设置ckeditor的数据(示例代码)
Nov 15 Javascript
js 上下左右键控制焦点(示例代码)
Dec 14 Javascript
jquery+ajax实现注册实时验证实例详解
Dec 08 Javascript
JavaScript——DOM操作——Window.document对象详解
Jul 14 Javascript
关于Vue.js一些问题和思考学习笔记(1)
Dec 02 Javascript
Express + Node.js实现登录拦截器的实例代码
Jul 01 Javascript
addeventlistener监听scroll跟touch(实例讲解)
Aug 04 Javascript
微信小程序picker组件关于objectArray数据类型的绑定方法
Mar 13 Javascript
jQuery层叠选择器用法实例分析
Jun 28 jQuery
JS 设计模式之:工厂模式定义与实现方法浅析
May 06 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
在PHP3中实现SESSION的功能(三)
2006/10/09 PHP
PHP中一个控制字符串输出的函数
2006/10/09 PHP
php 获取客户端的真实ip
2009/11/30 PHP
php中使用cookie来保存用户登录信息的实现代码
2012/03/08 PHP
PHP采用XML-RPC构造Web Service实例教程
2014/07/16 PHP
php实现数组按指定KEY排序的方法
2015/03/30 PHP
php利用fsockopen GET/POST提交表单及上传文件
2017/05/22 PHP
thinkphp5框架实现数据库读取的数据转换成json格式示例
2019/10/10 PHP
js中判断控件是否存在
2010/08/25 Javascript
js日期联动示例
2014/05/02 Javascript
Angular中的Promise对象($q介绍)
2015/03/03 Javascript
解决jquery无法找到其他父级子集问题的方法
2016/05/10 Javascript
轻松5句话解决JavaScript的作用域
2016/07/15 Javascript
Vue.JS入门教程之列表渲染
2016/12/01 Javascript
EditPlus 正则表达式 实战(3)
2016/12/15 Javascript
实现一个完整的Node.js RESTful API的示例
2017/09/29 Javascript
实例教学如何写vue插件
2017/11/30 Javascript
element-ui 的el-button组件中添加自定义颜色和图标的实现方法
2018/10/26 Javascript
Vue infinite update loop的问题解决
2019/04/23 Javascript
vue element upload实现图片本地预览
2019/08/20 Javascript
Vue文本模糊匹配功能如何实现
2020/07/30 Javascript
python中argparse模块用法实例详解
2015/06/03 Python
python 实现网上商城,转账,存取款等功能的信用卡系统
2016/07/15 Python
深入浅析python 中的匿名函数
2018/05/21 Python
python3 实现验证码图片切割的方法
2018/12/07 Python
Python编写通讯录通过数据库存储实现模糊查询功能
2019/07/18 Python
使用PyInstaller将Pygame库编写的小游戏程序打包为exe文件及出现问题解决方法
2019/09/06 Python
在notepad++中实现直接运行python代码
2019/12/18 Python
Ubuntu18.04安装 PyCharm并使用 Anaconda 管理的Python环境
2020/04/08 Python
Python如何在循环内使用list.remove()
2020/06/01 Python
HTML5 Canvas中绘制椭圆的4种方法
2015/04/24 HTML / CSS
广州迈达威.net面试题目
2012/03/10 面试题
历史学专业毕业生求职信
2013/09/27 职场文书
金融专业大学生自我评价
2014/01/09 职场文书
vite+vue3.0+ts+element-plus快速搭建项目的实现
2021/06/24 Vue.js
Nginx隐藏式跳转(浏览器URL跳转后保持不变)
2022/04/07 Servers