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中增加参数与Json转换代码
Nov 20 Javascript
JavaScript 继承机制的实现(待续)
May 18 Javascript
浅析jQuery的链式调用之each函数
Dec 03 Javascript
js 上下左右键控制焦点(示例代码)
Dec 14 Javascript
javascript中with()方法的语法格式及使用
Aug 04 Javascript
javascript 判断整数方法分享
Dec 16 Javascript
jQuery实现类似标签风格的导航菜单效果代码
Aug 25 Javascript
JS动态日期时间的获取方法
Sep 28 Javascript
深入理解JavaScript程序中内存泄漏
Mar 17 Javascript
浅谈Postman解决token传参的问题
Mar 31 Javascript
jQuery实现日历效果
Sep 11 jQuery
如何利用js在两个html窗口间通信
Apr 27 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 strip_tags() 去字符串中的 HTML、XML 以及 PHP 标签的函数
2016/05/22 PHP
跟我一起学写jQuery插件开发方法(附完整实例及下载)
2010/04/01 Javascript
JQuery一种取同级值的方式(比如你在GridView中)
2012/03/15 Javascript
window.open关于浏览器拦截问题分析及解决方法
2013/02/05 Javascript
js与jquery获取父级元素,子级元素,兄弟元素的实现方法
2014/01/09 Javascript
用box固定长宽实现图片自动轮播js代码
2014/06/09 Javascript
js实现仿百度汽车频道选择汽车图片展示实例
2015/05/06 Javascript
介绍JavaScript的一个微型模版
2015/06/24 Javascript
jquery validate和jquery form 插件组合实现验证表单后AJAX提交
2015/08/26 Javascript
学习JavaScript设计模式(链式调用)
2015/11/26 Javascript
JavaScript函数中关于valueOf和toString的理解
2016/06/14 Javascript
jQuery实现图片轮播效果代码
2016/09/27 Javascript
详解jQuery中基本的动画方法
2016/12/14 Javascript
JS去除字符串中空格的方法
2017/02/14 Javascript
vue.js组件之间传递数据的方法
2017/07/10 Javascript
在vue中读取本地Json文件的方法
2018/09/06 Javascript
如何使用puppet替换文件中的string
2018/12/06 Javascript
vue elementUI table表格数据 滚动懒加载的实现方法
2019/04/04 Javascript
微信小程序动态显示项目倒计时
2019/06/20 Javascript
python3.5 tkinter实现页面跳转
2018/01/30 Python
Windows下anaconda安装第三方包的方法小结(tensorflow、gensim为例)
2018/04/05 Python
示例详解Python3 or Python2 两者之间的差异
2018/08/23 Python
python 实现创建文件夹和创建日志文件的方法
2019/07/07 Python
python使用装饰器作日志处理的方法
2019/07/11 Python
Django用户认证系统 组与权限解析
2019/08/02 Python
python扫描线填充算法详解
2020/02/19 Python
深入理解Tensorflow中的masking和padding
2020/02/24 Python
详解Sticky Footer 绝对底部的两种套路
2017/11/03 HTML / CSS
html5 迷宫游戏(碰撞检测)实例一
2013/07/25 HTML / CSS
英国卫浴商店:Ergonomic Design
2019/09/22 全球购物
我想声明一个指针并为它分配一些空间, 但却不行。这些代码有什么 问题?char *p; *p = malloc(10);
2016/10/06 面试题
合作经营协议书范本
2014/04/17 职场文书
教师三严三实对照检查材料
2014/09/25 职场文书
2014年前台接待工作总结
2014/12/05 职场文书
2015年保洁员工作总结
2015/05/04 职场文书
《画家和牧童》教学反思
2016/02/17 职场文书