JQuery模板插件jquery.tmpl-动态ajax扩展
在上一篇JQuery模板插件-jquery.tmpl中介绍了这款插件。有时我们需要去动态的ajax去加载模板,或者数据,根据url参数或者其他信息加载不同的模板,数据。在我的某个项目中有这个需求,所以特地写成jquery工具函数,加入了本地数据和ajax数据加载模板,数据的方式。
参数说明:
Tmpl: function(template, data, fun)
1:template:
1): url: 为ajax的加载url,ajax当且仅当remote= true时候加载。
2):data: 为ajax加载参数
3) templateSelector: 为本地模板选择器,当且仅当remote= false时使用
4) remote: true为ajax,false为本地数据,
5) cache: 指示是否对模板缓存。
2:data:
1): url: 为ajax的加载url,ajax当且仅当remote= true时候加载。
2):data: 为ajax加载参数
3) templateData: 为本地数据,当且仅当remote= false时使用
4) remote: true为ajax,false为本地数据,
5) cache: 指示是否对模板缓存。
3:fun为回调函数:
fun(jquery.tmpl对象,模板script,数据);
具体代码如下:
- View Code
- ; (function($) {
- $.extend({
- Tmpl_Data: function(te, data, fun, templatecache) {
- data = jQuery.extend({ data: "", url: "", templateData: {}, remote: true, cache: true }, data);
- if (!data.remote) {
- fun(te.tmpl(data.templateData), te, data.templateData);
- if (!templatecache) {
- te.remove();
- }
- return;
- }
- var da = te.data("objdata");
- if (data.cache && da != null && da != undefined) {
- fun(te.tmpl(da), te, da);
- if (!templatecache) {
- te.remove();
- }
- return;
- }
- $.ajax({
- type: "GET",
- data: data.data,
- url: data.url,
- dataType: "json",
- cache: false,
- context: { template: te, data: data },
- success: function(tmpldata) {
- fun(this.template.tmpl(tmpldata), this.template, tmpldata);
- if (data.cache) {
- this.template.data("objdata", tmpldata);
- }
- if (!templatecache) {
- this.template.remove();
- }
- },
- error: function(e) {
- throw "get data error(" + this.data.url + "?" + this.data.data + "):" + e;
- }
- });
- },
- JquerySelecotrCharChange: function(str) {
- return str.replace(".", "\\.").replace("#", "\\#");
- },
- Tmpl: function(template, data, fun) {
- template = jQuery.extend({ data: "", url: "", templateSelector: "", remote: true, cache: true }, template);
- if (!template.remote) {
- $.Tmpl_Data($(template.templateSelector), data, fun, true);
- return;
- }
- var te = null;
- try {
- te = $("script:[url='" + $.JquerySelecotrCharChange(template.url + "?" + template.data) + "']")
- }
- catch (e) {
- }
- if (template.cache && te != null && te.length > 0) {
- $.Tmpl_Data(te, data, fun, template.cache);
- return;
- }
- $.ajax({
- type: "GET",
- data: template.data,
- url: template.url,
- dataType: "html",
- cache: false,
- context: { template: template, data: data },
- error: function(e) {
- throw "get template error(" + this.template.url + "?" + this.template.data + "):" + e;
- },
- success: function(tmpltemplate) {
- var te = $('<script type="text/x-jquery-tmpl">' + tmpltemplate + '<\/script>').appendTo(document.body);
- te.attr("url", (this.template.url + "?" + this.template.data));
- $.Tmpl_Data(te, this.data, fun, this.template.cache);
- }
- });
- }
- });
- })(jQuery);
- 复制代码
测试代码:
前台:
- View Code
- <%@ Page Language="C#" AutoEventWireup="true" CodeFile="Tmpl3.aspx.cs" Inherits="Tmpl3" %>
- <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd%22>
- <html xmlns="http://www.w3.org/1999/xhtml%22>
- <head runat="server">
- <title></title>
- <script src="Script/jquery-1.6.4.js" type="text/javascript"></script>
- <script src="Script/jquery-jquery-tmpl-07d08cb/jquery.tmpl.js" type="text/javascript"></script>
- <script type="text/javascript" src="Script/Remote-Tmpl.js"></script>
- <script type="text/javascript">
- ; String.format = function() {
- var s = arguments[0];
- for (var i = 0; i < arguments.length - 1; i++) {
- var reg = new RegExp("\\{" + i + "\\}", "gm");
- s = s.replace(reg, arguments[i + 1]);
- }
- return s;
- };
- function AjaxDeleteInvoke(id) {
- alert(String.format("AjaxDeleteInvoke:id={0}", id));
- }
- $(function() {
- $.Tmpl({ url: "TmplTemplate.htm", data: "test=1" }, { url: "Tmpl3.aspx", data: "ajax=1" }, function(t, te, da) {
- t.appendTo("#test>tbody");
- $("#test>tbody table").hide();
- $("#test .detailsImg").live("click", function() {
- var state = $(this).data("state");
- var $tr = $(this).parent().parent();
- if (state == "o") {
- $("table", $tr.next()).hide();
- $(this).data("state", "c");
- $(this).attr("src", "Image/folder_o.png");
- } else {
- $("table", $tr.next()).show();
- $(this).data("state", "o");
- $(this).attr("src", "Image/folder_c.png");
- }
- });
- });
- // $("#btntest").bind("click", function() {
- // $.Tmpl({ url: "TmplTemplate.htm", data: "test=1" }, { url: "Tmpl3.aspx", data: "ajax=1" }, function(t, te, da) {
- // t.appendTo("#Table1>tbody");
- // $("#Table1>tbody table").hide();
- // $("#Table1 .detailsImg").live("click", function() {
- // var state = $(this).data("state");
- // var $tr = $(this).parent().parent();
- // if (state == "o") {
- // $("table", $tr.next()).hide();
- // $(this).data("state", "c");
- // $(this).attr("src", "Image/folder_o.png");
- // } else {
- // $("table", $tr.next()).show();
- // $(this).data("state", "o");
- // $(this).attr("src", "Image/folder_c.png");
- // }
- // });
- // });
- // });
- var data = new Array();
- for (var i = 0; i < 19; i++) {
- data.push(
- {
- Name: String.format("学生{0}", i),
- Sex: i % 2 == 0 ? "男" : "女",
- ID: i,
- Class:
- [
- {
- ClassName: String.format("Class{0}", i),
- Count: (i + 10) / 2
- },
- {
- ClassName: String.format("Class2{0}", i),
- Count: (i + 20) / 2
- }
- ]
- });
- }
- $("#btntest").bind("click", function() {
- $.Tmpl({ url: "TmplTemplate.htm", data: "test=1" }, { remote:false,templateData:data }, function(t, te, da) {
- t.appendTo("#Table1>tbody");
- $("#Table1>tbody table").hide();
- $("#Table1 .detailsImg").live("click", function() {
- var state = $(this).data("state");
- var $tr = $(this).parent().parent();
- if (state == "o") {
- $("table", $tr.next()).hide();
- $(this).data("state", "c");
- $(this).attr("src", "Image/folder_o.png");
- } else {
- $("table", $tr.next()).show();
- $(this).data("state", "o");
- $(this).attr("src", "Image/folder_c.png");
- }
- });
- });
- });
- })
- </script>
- </head>
- <body>
- <form id="form1" runat="server">
- <div id="div1">
- <table style="margin-top: 10; margin-left: 300px;" border="1" cellpadding="0" cellspacing="0"
- id="test" width="500">
- <thead>
- <tr style="text-align: center; font-size: larger; font-weight: bolder;">
- <td>
- ID
- </td>
- <td>
- 姓名
- </td>
- <td>
- 性别
- </td>
- <td>
- 操作
- </td>
- </tr>
- </thead>
- <tbody>
- </tbody>
- </table>
- <hr />
- <p>
- 测试缓存系统(url)</p>
- <input type="button" id="btntest" value="testcache" />
- <table style="margin-top: 10; margin-left: 300px;" border="1" cellpadding="0" cellspacing="0"
- id="Table1" width="500">
- <thead>
- <tr style="text-align: center; font-size: larger; font-weight: bolder;">
- <td>
- ID
- </td>
- <td>
- 姓名
- </td>
- <td>
- 性别
- </td>
- <td>
- 操作
- </td>
- </tr>
- </thead>
- <tbody>
- </tbody>
- </table>
- </div>
- </form>
- </body>
- </html>
- 复制代码
后台ajax数据:
- View Code
- protected void Page_Load(object sender, EventArgs e)
- {
- if (Request["ajax"] == "1")
- {
- Response.Clear();
- Response.ContentType = "application/json";
- System.Text.StringBuilder sb = new System.Text.StringBuilder("[");
- for (int i = 0; i < 20; i++)
- {
- sb.AppendFormat(@" {{
- ""Name"":""学生{0}"",
- ""Sex"":""{1}"",
- ""ID"": {0},
- ""Class"":
- [
- {{
- ""ClassName"":""Class{0}"",
- ""Count"": {2}
- }},
- {{
- ""ClassName"":""Class2{0}"",
- "" Count"": {3}
- }}
- ]
- }},", i, i % 2 == 0 ? "男" : "女", (i + 10) / 2, (i + 20) / 2);
- }
- sb.Remove(sb.Length - 1, 1);
- sb.Append("]");
- Response.Write(sb.ToString());
- Response.Flush();
- Response.Close();
- Response.End();
- }
- }
- 复制代码
效果如上一篇:
demo下载
其他资料:我jQuery系列之目录汇总
转载于:https://blog.51cto.com/whitewolfblog/835204
相关文章:

《JAVA-枚举》
2019独角兽企业重金招聘Python工程师标准>>> 枚举:枚举在C/C/c#/java中,是一个被命名的整型常数的集合,枚举在日常生活中很常见。 表示星期的SUNDAY, MONDAY, TUESDAY, WEDNESDAY, THURSDAY, FRIDAY,就是一个简单的例子 既然讲了枚…

在ASP.NET中使用WINDOWS模式登录SQL数据库
作者:未知 请作者速与本人联系经常发现有用户使用WINDOWS模式登录SQL SERVER,结果失败,提示: 用户 KEKC/ASPNET 登录失败。 说明: 执行当前 Web 请求期间,出现未处理的异常。请检查堆栈跟踪信息,以了解有…

时髦而精巧的Iphone墙纸收集
Iphone5如此的流行,我觉得我们有必要为我们的读者收集一套时尚的iphone墙纸。 知道设计和开发社区是多么喜欢装饰他们的移动设备,我们收集了各大社区最好的iphone墙纸,帮助你更好的装饰你的iphone设备。 因为有如此多的墙纸设计,我…
谷歌排名第一的编程语言,死磕它这两点,小白也能学的会!不信你看!
谷歌排名第一的编程语言时什么?毫无疑问:肯定是 Python。也难怪,作为大数据时代和人工智能时代的必备语言,Python 的优点太多了,语言简洁、易学、开发效率高、可移植性强......另外,更牛的地方是目前最热门…

UVA11059 Maximum Product
问题链接:UVA11059 Maximum Product。基础级练习题,用C语言编写程序。 题意简述:输入n个整数序列,有正有负,求这个序列中最大连续累乘的子序列,其最大的值为多少。如果结果为负数,则输出0。 问题…

.NET代码的保护
1没有绝对的保护 加密和破解都相对的 2用vs2002/2003/开发的代码 删除.cs/.vb文件只留 .dll和.aspx可以达到加密若要加密.aspx 可以把.aspx代码写入.csvs2005 beta1可以连.aspx都打包 3但是 dll还可以被反编译 所以高级的是加入混淆器不过这样也不是绝对的还是可以反编译混淆…

走向DBA[MSSQL篇] 面试官最喜欢的问题 ----索引+C#面试题客串
对大量数据进行查询时,可以应用到索引技术。索引是一种特殊类型的数据库对象,它保存着数据表中一列或者多列的排序结果,有效地使用索引可以提高数据的查询效率。大家面试初级、中级或者高级程序员的时候应该大部分都会被问到这样一些问题,你了…
“编程能力差的程序员,90%会输在这点上”谷歌AI专家:其实都是瞎努力
最近几年,我看过市面上很多 Python和人工智能的教程和书籍,它们大都这样讲:先从 Python 人工智能的历史讲起开始,再介绍的基本语法规则,Python 的 list, dict, tuple 等数据结构,最后学习机器学习、深度学习…

查询表空间使用情况
2019独角兽企业重金招聘Python工程师标准>>> SELECT a.tablespace_name "表空间名", total "表空间大小", free "表空间剩余大小", (total - free) "表空间使用大小", total / (1024 * 1024 * 1024) "表空间大小(…
一只端午节鸭蛋粽子的背后:AI 与农业
作者 | 硬核云顶宫责编 | Carol封图 | CSDN 下载自视觉中国今年的端午节,食品界的营销鬼才五芳斋又发了最新广告——《朋友们蘸起来》,这则视频通过一种科幻大片的风格展示了农业与科技的完美结合,可以说在一只端午节粽子背后有AI的养猪、种的…

一些实用的 Javascript 代码
οncοntextmenu"window.event.returnvaluefalse" 将彻底屏蔽鼠标右键<table border οncοntextmenureturn(false)><td>no</table> 可用于Table <body onselectstart"return false"> 取消选取、防止复制 οnpaste"return fa…

围观文件穿越操作
1. 打开文件用IoCreateFile,其他比较好发irp的(比如删除操作)走FSD irp 删除文件部分处理了删除正在运行的exe镜像部分,做法是方法是IAT Hook MmFlushImageSection 但是这样对于独占文件依旧不能处理,只好等到关机…

图论 - 欧拉回路
Description 欧拉回路是指不令笔离开纸面,可画过图中每条边仅一次,且可以回到起点的一条回路。现给定一个图,问是否存在欧拉回路?Input 测试输入包含若干测试用例。每个测试用例的第1行给出两个正整数,分别是节点数N (…

学习 Linux,101: 引导系统
2019独角兽企业重金招聘Python工程师标准>>> 系列文章: http://www.ibm.com/developerworks/cn/views/linux/libraryview.jsp?search_by%E5%AD%A6%E4%B9%A0linux101 从 BIOS 到运行 Linux 系统 引导顺序 在我们深入了解启动加载程序(比如 LI…

用Enter键取代tab键
1. this.TextBox1.Attributes.Add("OnKeyPress","<script>if keycode13 keycode9; return false;</script>");2. <input typetext οnkeydοwn"if (event.keyCode 13) event.keyCode 9;">
程序员:我受够了!不想再在小厂里干Java了!
你是否熟悉这样的情形:每天10点到公司,打开电脑:10个小时的增删改查,搬砖写代码的一天就这样开始了。刚毕业时候的你踌躇满志,按照自己的原定计划,这时候应该混到了阿里P6。可现在在小厂苦苦挣扎࿰…

iOS中UISearchBar(搜索框)使用总结
2019独角兽企业重金招聘Python工程师标准>>> iOS中UISearchBar(搜索框)使用总结 初始化:UISearchBar继承于UIView,我们可以像创建View那样创建searchBar UISearchBar * bar [[UISearchBar alloc]initWithFrame:CGRectMake(20, 100, 250, 40)…

Linux常用性能检测命令
一、uptime Uptime命令的显示结果包括服务器已经运行了多长时间,有多少登陆用户和对服务器性能的总体评估(load average)。load average值分别记录了上个1分钟,5分钟和15分钟间隔的负载情况,load average不是一个百…

怎样把DataGrid存放在ViewState中的无用数据卡掉
作者:无间道的博客http://www.cnblogs.com/wangsaokui/articles/10031.html 怎样把 DataGrid 存放在 ViewState 中的无用数据(有时候确实如此)卡掉,大家知道,一般而言DataGrid在ViewState中会存放表格中的所有数据,这样会导致View…
深度学习先驱 Yann LeCun 被骂到封推!AI 偏见真该甩锅数据集?
整理 | 夕颜出品 | CSDN(ID:CSDNnews)最近,人工智能领域又发生了一次热热闹闹的争论,随后演变成一场偏离轨道的争吵,目前以 Yann 道歉封推暂告一段落......争论来龙去脉这次争论的主角是图灵奖得主、人工智能标杆性人物…

JS加强学习-DOM学习01
JavaScript由三个部分组成:ECMAScript、DOM、BOM。前面已经学习了ECMAScript中的基础内容,现在可以开始学习DOM部分了,在DOM中更多的是实际效果的展现。 1. DOM定义 DOM:document object model 文档对象模型 它是将整个页面文档封…

android 游戏引擎libgdx demo cuboc分析
开始学习android游戏开发也有一段时间了,挑选libgdx这个游戏引擎来进行学习和开发。Libgdx是一款支持2D与3D游戏开发的游戏类库,并且它是夸平台的。例如你可以在windos下开发,同样的代码也可以运行在android上。 刚开始学习这个游戏引擎可能会感觉无从下手&#…
倒计时1天 | 张钹院士领衔,AI开发者大会20大论坛全攻略!
2020年7月3—4日,由 CSDN 主办的第三届 AI 开发者大会(AI ProCon 2020)(大会官网:https://aiprocon.csdn.net/)将以线上直播的形式与大家相见。本次大会历时2天,一次性设立6大主题、20大精彩分论…

在页面中导入文件
1. <% Response.WriteFile ("Yourfile.inc") %> 2. Server.Execute("Yourfile.inc")

How Tomcat works — 四、tomcat启动(3)
上一节说到StandardService负责启动其子组件:container和connector,不过注意,是有先后顺序的,先启动container,再启动connector,这一节先来看看container。 目录 Pipeline和VavleStandardEngine类和Standar…

DataList分页
<% Page Language"C#" %> <% Import Namespace"System.Data" %> <% Import Namespace"System.Data.OleDb" %> <Script Language"C#" Runat"Server"> /* Create By 飞刀 http://www.aspcn.com 20…

【中文】Joomla1.7扩展介绍之Googlemaps Plugin
Googlemaps Plugin 插件分类:Maps 支持版本:1.5 /1.6 /1.7 关注程度:【最流行的】 所属类型:插件、多语种 可以在 Joomla 1.5.x (native), 1.6.x and 1.7.x. 的内容条目、模块或者组件中显示一个(或多个)…
一文读懂:GoogleNet的Inception从v1到v4的演变
来源 | 机器学习炼丹术GoogleNet和VGG是ImageNet挑战赛中的第一名和第二名。共同特点就是两个网络的层次都更深了。但是:VGG继承了LeNet和AlexNet的一些框架结构而GoogleNet则做了更大胆的尝试,虽然深度有22层,但是参数却是Alexnet的1/12.而V…

几何画板画一个五边形内部的方法
五边形属于多边形里面比较简单的,就是在四边形的基础上增加一条边而已,五边形在平面几何学上指所有由五条边围衬成及有五个角的多边形。完美五边形和正五边形都是五边形的一种特殊类型。几何画板作为专业绘图工具,可以轻松就画出五边形&#…

GDAL Data Model(转)
即描述一个GDAL data store能够包含的信息的类型。 Dataset 一个dataset (即一个GDALDataset 对象)是一组相关的raster bands和一些属于它们的公共信息的集合。尤其是dataset有一个适用于它所有bands的关于raster size的概念,它是用pixels 和…