详解Js模板引擎(TrimPath)
当页面中引用template.js文件之后,脚本将创建一个TrimPath对象供你使用。
parseDOMTemplate(elementId,optionalDocument) //获得模板字符串代码
得到页面中Id为elementId的DOM组件的InnerHTML,将其解析成一个模板,这个返回一个templateObject对象,解析出错时将抛出一个异常。
optionalDocument一个可选参数,在使用iframe,frameset或者默认多文档时会有用,通常用来做模板的DOM元素师一个隐藏的<textarea>。
以上方法的到的模板(字符串)再经过process()方法进一步解析就得到了最终的源代码。
如:
var result = parseDOMTemplate(elementId,optionalDocument).process(); //用数据替换模板
这个方法也直接能用于解析字符串:
var data = { Name:"张辽" }; //不输入就包ul,输入就包你输入的那个 var result = TrimPath.processDOMTemplate("temp", data); document.getElementById("ShowDiv").innerHTML = result; alert("hello ${Name}".process(data)); //process()就是一个将数据解析模板的函数,这里输出hello,张辽
一步到位的方法
TrimPath.processDOMTemplate(elementId,contextObject,optionalFlags,optionalDocument)
这是一个辅助函数,内部调用TrimPath.parseDOMTemplate()和Process()方法结果就是经过解析后生成的代码。
其作用相当于parseDOMTemplate().process(),即从textarea读取模板后替换数据。
先来看一个最简单的例子
<html> <head> <title>TrimPath学习测试</title> <script src="../../Scripts/trimpath/template.js" type="text/javascript"></script> </head> <body> <div id="ShowDiv"> </div> <textarea id="temp" style="display:none;"> ${Name}败走麦城! </textarea> </body> </html> <script language="javascript"> var data = { Name: "关云长" }; var result = TrimPath.processDOMTemplate("temp", data); document.getElementById("ShowDiv").innerHTML = result; </script>
以上代码在页面上输出关云长败走麦城!
其实,这个东西与C#,PHP的模板引擎,并没有本质上的区别,都是读入模板,然后替换数据。只不过,C#与PHP等后台语言,一般都从文件里面读取模板,如Html,txt等。而TrimPath就从<textarea></textarea>标签上读取模板。
条件控制示例(if () else())
<html> <head> <title>TrimPath学习测试</title> <script src="../../Scripts/trimpath/template.js" type="text/javascript"></script> </head> <body> <div id="ShowDiv"> </div> <textarea id="temp" style="display:none;"> {if Name == "关云长"} ${Name}龙卷旋风斩! {elseif Name == "郭嘉"} ${Name}冰河爆裂破! {else} ${Name}放大! {/if} </textarea> </body> </html> <script language="javascript"> var data = { Name: "郭嘉" }; var result = TrimPath.processDOMTemplate("temp", data); document.getElementById("ShowDiv").innerHTML = result; </script>
循环控制(for forelse /for):
<html> <head> <title>TrimPath学习测试</title> <script src="../../Scripts/trimpath/template.js" type="text/javascript"></script> </head> <body> <div id="ShowDiv"> </div> <textarea id="temp" style="display: none;"> <table width="400" cellspacing="0" cellpadding="0" border="1"> {for i in data} <tr> <td>${i.Name}</td> <td>${i.Big}</td> </tr> {/for} </table> </textarea> </body> </html> <script type="text/javascript"> var data = [ { Name: "关羽", Big: "龙卷旋风斩" }, { Name: "郭嘉", Big: "冰河爆裂破" }, { Name: "诸葛", Big: "卧龙光线", }, ]; //他妈的for循环多了一次 var result = TrimPath.processDOMTemplate("temp", data); document.getElementById("ShowDiv").innerHTML = result; </script>
语法结构如下
{for varName in listExpr}
主循环体
{forelse}
当输入为null,或listExpr数量为0时
{/for}
宏定义
<html> <head> <title>TrimPath学习测试</title> <script src="../../Scripts/trimpath/template.js" type="text/javascript"></script> </head> <body> <div id="ShowDiv"> </div> <textarea id="temp" style="display: none;"> {macro htmlList(list, optionalListType)} {var listType = optionalListType != null ? optionalListType : "ul"} <${listType}> {for item in list} <li>${item}</li> {/for} </${listType}> {/macro} ${htmlList(["AA","BB","CC"], "")} </textarea> </body> </html> <script type="text/javascript"> var data = {}; //不输入就包ul,输入就包你输入的那个 var result = TrimPath.processDOMTemplate("temp", data); document.getElementById("ShowDiv").innerHTML = result; </script>
CDATA区域
<html> <head> <title>TrimPath学习测试</title> <script src="../../Scripts/trimpath/template.js" type="text/javascript"></script> </head> <body> <div id="ShowDiv"> </div> <textarea id="temp" style="display: none;"> {cdata}${Name}{/cdata} 被解释成了 ${Name} </textarea> </body> </html> <script type="text/javascript"> var data = { Name:"张辽" }; //不输入就包ul,输入就包你输入的那个 var result = TrimPath.processDOMTemplate("temp", data); document.getElementById("ShowDiv").innerHTML = result; </script>
内联js
<html> <head> <title>TrimPath学习测试</title> <script src="../../Scripts/trimpath/template.js" type="text/javascript"></script> </head> <body> <div id="ShowDiv"> </div> <textarea id="temp" style="display: none;"> <select onchange="sel_onchange()"> <option value="1">1</option> <option value="2">2</option> </select> {eval} sel_onchange = function() { alert('我不小心被change了'); //此js事件会被触发,并且此处的注释没影响 } {/eval} </textarea> </body> </html> <script type="text/javascript"> var data = { Name:"张辽" }; //不输入就包ul,输入就包你输入的那个 var result = TrimPath.processDOMTemplate("temp", data); document.getElementById("ShowDiv").innerHTML = result; </script>
结合.Net MVC后台程序再来一把
using System; using System.Collections.Generic; using System.Linq; using System.Web; using System.Web.Mvc; namespace 测试jQuery_EasyUI.Controllers { [HandleError] public class HomeController : Controller { public ActionResult Index() { return View(); } public ActionResult GetJson() { Person p1 = new Person(1, "刘备", 30); Person p2 = new Person(2, "关羽", 28); Person p3 = new Person(3, "张飞", 36); List<Person> ListPerson = new List<Person>(); ListPerson.Add(p1); ListPerson.Add(p2); ListPerson.Add(p3); return Json(ListPerson,JsonRequestBehavior.AllowGet); } } public class Person { public Person(int id, string name, int age) { Id = id; Name = name; Age = age; } public int Id { get; set; } public string Name { get; set; } public int Age { get; set; } } }
前台代码
<%@ Page Language="C#" Inherits="System.Web.Mvc.ViewPage" %> <html> <head> <title>TrimPath学习测试</title> <script src="../../Scripts/jquery.min.js" type="text/javascript"></script> <script src="../../Scripts/trimpath/template.js" type="text/javascript"></script> </head> <body> <div id="ShowDiv"> </div> <textarea id="temp" style="display: none;"> <table width="400" cellspacing="0" cellpadding="0" border="1"> <tr> <td>Id</td> <td>姓名</td> <td>年龄</td> </tr> {for i in data} <tr> <td>${i.Id}</td> <td>${i.Name}</td> <td>${i.Age}</td> </tr> {/for} </table> </textarea> </body> </html> <script type="text/javascript"> var data; $(function() { $.ajax({ url: "/Home/GetJson", type: 'post', async: true, dataType: 'json', suess: function(response) { data = response; var result = TrimPath.processDOMTemplate("temp", data); document.getElementById("ShowDiv").innerHTML = result; } }) }) </script>
输出结果如下
以上就是本文的全部内容,希望对大家有所帮助,谢谢对狼蚁SEO的支持!
编程语言
- 如何快速学会编程 如何快速学会ug编程
- 免费学编程的app 推荐12个免费学编程的好网站
- 电脑怎么编程:电脑怎么编程网咯游戏菜单图标
- 如何写代码新手教学 如何写代码新手教学手机
- 基础编程入门教程视频 基础编程入门教程视频华
- 编程演示:编程演示浦丰投针过程
- 乐高编程加盟 乐高积木编程加盟
- 跟我学plc编程 plc编程自学入门视频教程
- ug编程成航林总 ug编程实战视频
- 孩子学编程的好处和坏处
- 初学者学编程该从哪里开始 新手学编程从哪里入
- 慢走丝编程 慢走丝编程难学吗
- 国内十强少儿编程机构 中国少儿编程机构十强有
- 成人计算机速成培训班 成人计算机速成培训班办
- 孩子学编程网上课程哪家好 儿童学编程比较好的
- 代码编程教学入门软件 代码编程教程