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 相关文章推荐
JQGrid的用法解析(列编辑,添加行,删除行)
Nov 08 Javascript
jquery解析JSON数据示例代码
Mar 17 Javascript
jquery中使用循环下拉菜单示例代码
Sep 24 Javascript
BootStrap创建响应式导航条实例代码
May 31 Javascript
jQuery实现6位数字密码输入框
Dec 29 Javascript
ES6入门教程之Iterator与for...of循环详解
May 17 Javascript
JS实现给json数组动态赋值的方法示例
Mar 19 Javascript
Javascript(es2016) import和require用法和区别详解
Aug 11 Javascript
Vue自定义toast组件的实例代码
Aug 15 Javascript
Vue路由history模式解决404问题的几种方法
Sep 29 Javascript
详解create-react-app 2.0版本如何启用装饰器语法
Oct 23 Javascript
深入了解JavaScript 防抖和节流
Sep 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下HTTP Response中的Chunked编码实现方法
2008/11/19 PHP
php结合安卓客户端实现查询交互实例
2015/05/05 PHP
php的常量和变量实例详解
2017/06/27 PHP
PHP实现基于图的深度优先遍历输出1,2,3...n的全排列功能
2017/11/10 PHP
用javascript实现在小方框中浏览大图的代码
2007/08/14 Javascript
javascript 操作文件 实现方法小结
2009/07/02 Javascript
jQuery 相关控件的事件操作分解
2009/08/03 Javascript
基于MVC3方式实现下拉列表联动(JQuery)
2013/09/02 Javascript
JavaSript中变量的作用域闭包的深入理解
2014/05/12 Javascript
原生javascript实现获取指定元素下所有后代元素的方法
2014/10/28 Javascript
Node.js 异步编程之 Callback介绍(一)
2015/03/30 Javascript
js实现简单计算器
2015/11/22 Javascript
原生JavaScript制作微博发布面板效果
2016/03/11 Javascript
jQuery Validate验证框架详解(推荐)
2016/12/17 Javascript
原生js实现商品放大镜效果
2017/01/12 Javascript
JavaScript之DOM_动力节点Java学院整理
2017/07/03 Javascript
详解用Node.js写一个简单的命令行工具
2018/03/01 Javascript
nodejs 使用http进行post或get请求的实例(携带cookie)
2019/01/03 NodeJs
详解js常用分割取字符串的方法
2019/05/15 Javascript
VUE中使用HTTP库Axios方法详解
2020/02/05 Javascript
[03:22]DSPL第一期精彩集锦:酷炫到底!
2014/11/07 DOTA
python解析中国天气网的天气数据
2014/03/21 Python
Python集中化管理平台Ansible介绍与YAML简介
2019/06/12 Python
python实现代码统计器
2019/09/19 Python
python子线程退出及线程退出控制的代码
2019/10/16 Python
matplotlib 生成的图像中无法显示中文字符的解决方法
2020/06/10 Python
Python连接Mysql进行增删改查的示例代码
2020/08/03 Python
html5的input的required使用中遇到的问题及解决方法
2018/04/24 HTML / CSS
加拿大约会网站:EliteSingles.ca
2018/01/12 全球购物
教育专业个人求职信
2013/12/02 职场文书
工商企业管理应届生求职信
2014/05/04 职场文书
班级学雷锋活动总结
2014/06/26 职场文书
公务员上班玩游戏检讨书
2014/09/17 职场文书
JavaScript+HTML实现学生信息管理系统
2021/04/20 Javascript
浅谈JS和Nodejs中的事件驱动
2021/05/05 NodeJs
一篇文章带你掌握SQLite3基本用法
2022/06/14 数据库