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查找父节点的简单方法
Jun 28 Javascript
JavaScript 获取当前时间戳的代码
Aug 05 Javascript
基于Jquery的仿Windows Aero弹出窗(漂亮的关闭按钮)
Sep 28 Javascript
JavaScript对象反射用法实例
Apr 17 Javascript
通过jquery-ui中的sortable来实现拖拽排序的简单实例
May 24 Javascript
D3.js实现文本的换行详解
Oct 14 Javascript
bootstrap插件treeview实现全选父节点下所有子节点和反选功能
Jul 21 Javascript
利用vue.js把静态json绑定bootstrap的table方法
Aug 28 Javascript
mock.js模拟前后台交互
Jul 25 Javascript
vue 实现在同一界面实现组件的动态添加和删除功能
Jun 16 Javascript
微信小程序报错: thirdScriptError的错误问题
Jun 19 Javascript
微信小程序实现导航栏和内容上下联动功能代码
Jun 29 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预定义常量
2006/12/25 PHP
php 获取客户端的真实ip
2009/11/30 PHP
php最简单的删除目录与文件实现方法
2014/11/28 PHP
php分割合并两个字符串的函数实例
2015/06/19 PHP
thinkPHP中create方法与令牌验证实例浅析
2015/12/08 PHP
你不知道的文件上传漏洞php代码分析
2016/09/29 PHP
php安装扩展mysqli的实现步骤及报错解决办法
2017/09/23 PHP
由浅到深了解JavaScript类
2006/09/08 Javascript
Javascript与vbscript数据共享
2007/01/09 Javascript
jquery each()源代码
2011/02/14 Javascript
JS中批量给元素绑定事件过程中的相关问题使用闭包解决
2013/04/15 Javascript
document节点对象的获取方式示例介绍
2013/12/24 Javascript
利用javascript打开模态对话框(示例代码)
2014/01/11 Javascript
JavaScript实现给定时间相加天数的方法
2016/01/25 Javascript
nodejs个人博客开发第七步 后台登陆
2017/04/12 NodeJs
react路由配置方式详解
2017/08/07 Javascript
JS实现的透明度渐变动画效果示例
2018/04/28 Javascript
vue使用vuex实现首页导航切换不同路由的方法
2019/05/08 Javascript
Vue 动态组件components和v-once指令的实现
2019/08/30 Javascript
vue中axios的二次封装实例讲解
2019/10/14 Javascript
微信小程序后端无法保持session的原因及解决办法问题
2020/03/20 Javascript
python中使用xlrd、xlwt操作excel表格详解
2015/01/29 Python
Python SQLite3简介
2018/02/22 Python
用Cython加速Python到“起飞”(推荐)
2019/08/01 Python
Pycharm自动添加文件头注释和函数注释参数的方法
2020/10/23 Python
车库门开启器、遥控器和零件:Chamberlain
2019/04/09 全球购物
Strathberry苏贝瑞中国官网:西班牙高级工匠手工打造
2020/10/19 全球购物
SQL Server的固定数据库角色都有哪些?对应的服务器权限有哪些?
2013/05/18 面试题
2013年高中生自我评价
2013/10/23 职场文书
幼儿园中班开学寄语
2014/04/03 职场文书
竞选副班长演讲稿
2014/04/24 职场文书
干部作风整顿个人剖析材料
2014/10/06 职场文书
毕业证明模板
2015/06/19 职场文书
OpenCV-Python实现怀旧滤镜与连环画滤镜
2021/06/09 Python
Python图像处理库PIL详细使用说明
2022/04/06 Python
基于Python编写一个监控CPU的应用系统
2022/06/25 Python