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+CSS 图片等比缩小并垂直居中实现代码
Dec 01 Javascript
js 判断一个元素是否在页面中存在
Dec 27 Javascript
JS常用函数使用指南
Nov 23 Javascript
js判断手机端(Android手机还是iPhone手机)
Jul 22 Javascript
js实现图片放大和拖拽特效代码分享
Sep 05 Javascript
JS密码生成与强度检测完整实例(附demo源码下载)
Apr 06 Javascript
Angularjs中的ui-bootstrap的使用教程
Feb 19 Javascript
原生js实现瀑布流布局
Mar 08 Javascript
IScroll5实现下拉刷新上拉加载的功能实例
Aug 11 Javascript
Vue中父子组件通讯之todolist组件功能开发
May 21 Javascript
vue实现文字加密功能
Sep 27 Javascript
如何用vue-cli3脚手架搭建一个基于ts的基础脚手架的方法
Dec 12 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手机号码及邮箱正则表达式实例解析
2020/07/11 PHP
extjs 学习笔记(二) Ext.Element类
2009/10/13 Javascript
javascript 获取元素位置的快速方法 getBoundingClientRect()
2009/11/26 Javascript
Jquery知识点三 jquery表单对象操作
2011/01/17 Javascript
jQuery 过滤not()与filter()实例代码
2012/05/10 Javascript
5分钟理解JavaScript中this用法分享
2013/11/09 Javascript
怎么选择Javascript框架(Javascript Framework)
2013/11/22 Javascript
Javascript前端UI框架Kit使用指南之kitjs的对话框组件
2014/11/28 Javascript
jQuery实现tab选项卡效果的方法
2015/07/08 Javascript
javascript中offset、client、scroll的属性总结
2015/08/13 Javascript
js表单登陆验证示例
2016/10/19 Javascript
浅谈React前后端同构防止重复渲染
2018/01/05 Javascript
jQuery.parseJSON()函数详解
2019/02/28 jQuery
微信小程序 腾讯地图显示偏差问题解决
2019/07/27 Javascript
Vue 刷新当前路由的实现代码
2019/09/26 Javascript
[03:48]大碗DOTA
2019/07/25 DOTA
Python的Flask框架中集成CKeditor富文本编辑器的教程
2016/06/13 Python
利用Python脚本实现ping百度和google的方法
2017/01/24 Python
教你使用python实现微信每天给女朋友说晚安
2018/03/23 Python
Python用61行代码实现图片像素化的示例代码
2018/12/10 Python
解决torch.autograd.backward中的参数问题
2020/01/07 Python
Django权限设置及验证方式
2020/05/13 Python
使用tensorflow实现VGG网络,训练mnist数据集方式
2020/05/26 Python
零基础学python应该从哪里入手
2020/08/11 Python
python+openCV对视频进行截取的实现
2020/11/27 Python
求高于平均分的学生学号及成绩
2016/09/01 面试题
应聘医学检验人员自荐信
2013/09/27 职场文书
生产班组长岗位职责
2014/01/05 职场文书
单身联谊活动方案
2014/01/29 职场文书
优秀护士获奖感言
2014/02/20 职场文书
财务简历的自我评价
2014/03/05 职场文书
学生会竞选演讲稿
2014/04/24 职场文书
建筑学专业自荐书
2014/07/09 职场文书
县长群众路线对照检查材料思想汇报
2014/10/02 职场文书
秋冬农业生产标语
2014/10/09 职场文书
Django使用echarts进行可视化展示的实践
2021/06/10 Python