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字典探测用户名工具
Oct 05 Javascript
多浏览器兼容性比较好的复制到剪贴板的js代码
Oct 09 Javascript
用dtree实现树形菜单 dtree使用说明
Oct 17 Javascript
利用jquery的获取JS文件中的字符串内容
Feb 14 Javascript
JS+flash实现chrome和ie浏览器下同时可以复制粘贴
Sep 22 Javascript
JS复制到剪贴板示例代码
Oct 30 Javascript
jQuery验证元素是否为空的两种常用方法
Mar 17 Javascript
原生JS和JQuery动态添加、删除表格行的方法
May 28 Javascript
javascript中递归函数用法注意点
Jul 30 Javascript
JS实现漂亮的时间选择框效果
Aug 20 Javascript
vue 封装自定义组件之tabal列表编辑单元格组件实例代码
Sep 07 Javascript
Node.js API详解之 console模块用法详解
May 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代码
2006/12/06 PHP
PHP如何编写易读的代码
2007/07/10 PHP
Smarty Foreach 使用说明
2010/03/23 PHP
php empty() 检查一个变量是否为空
2011/11/10 PHP
PHP处理二进制数据的实现方法
2016/06/13 PHP
PHP中Notice错误常见解决方法
2017/04/28 PHP
php实现基于pdo的事务处理方法示例
2017/07/21 PHP
javascript Zifa FormValid 0.1表单验证 代码打包下载
2007/06/08 Javascript
seajs中模块的解析规则详解和模块使用总结
2014/03/12 Javascript
一个Action如何调用两个不同的方法
2014/05/22 Javascript
React Native实现简单的登录功能(推荐)
2016/09/19 Javascript
用headjs来管理和加载js 提高网站加载速度
2016/11/29 Javascript
微信小程序 Windows2008 R2服务器配置TLS1.2方法
2016/12/05 Javascript
详解vue表单验证组件 v-verify-plugin
2017/04/19 Javascript
详解vue-cli 快速搭建单页应用之遇到的问题及解决办法
2018/03/01 Javascript
jQuery添加新内容的四个常用方法分析【append,prepend,after,before】
2019/03/19 jQuery
微信小程序实现弹出菜单动画
2019/06/21 Javascript
Python 元类实例解析
2018/04/04 Python
Django使用详解:ORM 的反向查找(related_name)
2018/05/30 Python
python dataframe常见操作方法:实现取行、列、切片、统计特征值
2018/06/09 Python
Python+OpenCV实现图像融合的原理及代码
2018/12/03 Python
Python神奇的内置函数locals的实例讲解
2019/02/22 Python
Python语言异常处理测试过程解析
2020/01/08 Python
Django models文件模型变更错误解决
2020/05/11 Python
matplotlib交互式数据光标mpldatacursor的实现
2021/02/03 Python
css3背景_动力节点Java学院整理
2017/07/11 HTML / CSS
手工制作的豪华英式沙发和沙发床:Willow & Hall
2019/05/03 全球购物
澳大利亚鞋仓库:Shoe Warehouse
2019/07/25 全球购物
两道JAVA笔试题
2016/09/14 面试题
应届大学生求职信
2013/12/01 职场文书
高校辅导员推荐信范文
2013/12/25 职场文书
《乌鸦和狐狸》教学反思
2014/02/08 职场文书
冰雪公主观后感
2015/06/16 职场文书
公务员学习中国梦心得体会
2016/01/05 职场文书
Python Django 后台管理之后台模型属性详解
2021/04/25 Python
纯CSS3实现div按照顺序出入效果
2021/07/15 HTML / CSS