在上一篇中介绍了这款插件。有时我们需要去动态的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 Codeprotected 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(); } }效果如上一篇:
其他资料:我jQuery系列之目录汇总