当页面中引用template.js文件之后,脚本将创建一个TrimPath对象供你使用。

  1. parseDOMTemplate(elementId,optionalDocument)  //获得模板字符串代码

  得到页面中Id为elementId的DOM组件的InnerHTML,将其解析成一个模板,这个返回一个templateObject对象,解析出错时将抛出一个异常。
  optionalDocument一个可选参数,在使用iframe,frameset或者默认多文档时会有用,通常用来做模板的DOM元素师一个隐藏的<textarea>。

  以上方法的到的模板(字符串)再经过process()方法进一步解析就得到了最终的源代码。
  如:

  1. var result = parseDOMTemplate(elementId,optionalDocument).process();  //用数据替换模板

  这个方法也直接能用于解析字符串:

  1. var data = { Name:"张辽" };       //不输入就包ul,输入就包你输入的那个
  2. var result = TrimPath.processDOMTemplate("temp", data);
  3. document.getElementById("ShowDiv").innerHTML = result;
  4. alert("hello ${Name}".process(data)); //process()就是一个将数据解析模板的函数,这里输出hello,张辽

  一步到位的方法:

  1. TrimPath.processDOMTemplate(elementId,contextObject,optionalFlags,optionalDocument)

  这是一个辅助函数,内部调用TrimPath.parseDOMTemplate()和Process()方法结果就是经过解析后生成的代码。

  其作用相当于parseDOMTemplate().process(),即从textarea读取模板后替换数据。

  先来看一个最简单的例子:

  1. <html>
  2.   <head>
  3.     <title>TrimPath学习测试</title>
  4.     <script src="../../Scripts/trimpath/template.js" type="text/javascript"></script>
  5.   </head>
  6. <body>
  7.   <div id="ShowDiv">
  8.   </div>
  9.   <textarea id="temp" style="display:none;">
  10.     ${Name}败走麦城!
  11.   </textarea>
  12. </body>
  13. </html>
  14. <script language="javascript">
  15.   var data = { Name: "关云长" };
  16.   var result = TrimPath.processDOMTemplate("temp", data);
  17.   document.getElementById("ShowDiv").innerHTML = result;
  18. </script>

  以上代码在页面上输出:关云长败走麦城!

  其实,这个东西与C#,PHP的模板引擎,并没有本质上的区别,都是读入模板,然后替换数据。只不过,C#与PHP等后台语言,一般都从文件里面读取模板,如Html,txt等。而TrimPath就从<textarea></textarea>标签上读取模板。

  条件控制示例(if () else()):

  1. <html>
  2.   <head>
  3.     <title>TrimPath学习测试</title>
  4.     <script src="../../Scripts/trimpath/template.js" type="text/javascript"></script>
  5.   </head>
  6. <body>
  7.   <div id="ShowDiv">
  8.   </div>
  9.   <textarea id="temp" style="display:none;">
  10.     {if Name == "关云长"}
  11.     ${Name}龙卷旋风斩!
  12.     {elseif Name == "郭嘉"}
  13.     ${Name}冰河爆裂破!
  14.     {else}
  15.     ${Name}放大!
  16.     {/if}
  17.   </textarea>
  18. </body>
  19. </html>
  20. <script language="javascript">
  21. var data = { Name: "郭嘉" };
  22. var result = TrimPath.processDOMTemplate("temp", data);
  23. document.getElementById("ShowDiv").innerHTML = result;
  24. </script>

  循环控制(for forelse /for):

  1. <html>
  2. <head>
  3.   <title>TrimPath学习测试</title>
  4.   <script src="../../Scripts/trimpath/template.js" type="text/javascript"></script>
  5. </head>
  6. <body>
  7.   <div id="ShowDiv">
  8.   </div>
  9.   <textarea id="temp" style="display: none;">
  10.   <table width="400" cellspacing="0" cellpadding="0" border="1">
  11.     {for i in data}
  12.       <tr>
  13.         <td>${i.Name}</td>
  14.         <td>${i.Big}</td>
  15.       </tr>
  16.     {/for}
  17.   </table>
  18.   </textarea>
  19. </body>
  20. </html>
  21.  
  22. <script type="text/javascript">
  23. var data = [
  24. { Name: "关羽", Big: "龙卷旋风斩" },
  25. { Name: "郭嘉", Big: "冰河爆裂破" },
  26. { Name: "诸葛", Big: "卧龙光线", },
  27. ]; //他妈的for循环多了一次
  28. var result = TrimPath.processDOMTemplate("temp", data);
  29. document.getElementById("ShowDiv").innerHTML = result;
  30. </script>

  语法结构如下:

  1. {for varName in listExpr}
  2. 主循环体
  3. {forelse}
  4. 当输入为null,或listExpr数量为0
  5. {/for}

  宏定义:

  1. <html>
  2. <head>
  3.   <title>TrimPath学习测试</title>
  4.   <script src="../../Scripts/trimpath/template.js" type="text/javascript"></script>
  5. </head>
  6. <body>
  7.   <div id="ShowDiv">
  8.   </div>
  9.   <textarea id="temp" style="display: none;">
  10.     {macro htmlList(list, optionalListType)}
  11.     {var listType = optionalListType != null ? optionalListType : "ul"}
  12.     <${listType}>
  13.       {for item in list}
  14.         <li>${item}</li>
  15.       {/for}
  16.     </${listType}>
  17.     {/macro}
  18.     ${htmlList(["AA","BB","CC"], "")}
  19.     </textarea>
  20. </body>
  21. </html>
  22.  
  23. <script type="text/javascript">
  24. var data = {}; //不输入就包ul,输入就包你输入的那个
  25. var result = TrimPath.processDOMTemplate("temp", data);
  26. document.getElementById("ShowDiv").innerHTML = result;
  27. </script>

  CDATA区域:

  1. <html>
  2. <head>
  3. <title>TrimPath学习测试</title>
  4.   <script src="../../Scripts/trimpath/template.js" type="text/javascript"></script>
  5. </head>
  6. <body>
  7.   <div id="ShowDiv">
  8.   </div>
  9.     <textarea id="temp" style="display: none;">
  10.       {cdata}${Name}{/cdata} 被解释成了 ${Name}
  11.     </textarea>
  12. </body>
  13. </html>
  14. <script type="text/javascript">
  15. var data = { Name:"张辽" }; //不输入就包ul,输入就包你输入的那个
  16. var result = TrimPath.processDOMTemplate("temp", data);
  17. document.getElementById("ShowDiv").innerHTML = result;
  18. </script>

  内联js:

  1. <html>
  2. <head>
  3.   <title>TrimPath学习测试</title>
  4.   <script src="../../Scripts/trimpath/template.js" type="text/javascript"></script>
  5. </head>
  6. <body>
  7.   <div id="ShowDiv">
  8.   </div>
  9.     <textarea id="temp" style="display: none;">
  10.       <select onchange="sel_onchange()">
  11.         <option value="1">1</option>
  12.         <option value="2">2</option>
  13.       </select>
  14.       {eval}
  15.         sel_onchange = function() {
  16.         alert('我不小心被change了'); //此js事件会被触发,并且此处的注释没影响
  17.         }
  18.       {/eval}
  19.     </textarea>
  20. </body>
  21. </html>
  22.  
  23. <script type="text/javascript">
  24. var data = { Name:"张辽" }; //不输入就包ul,输入就包你输入的那个
  25. var result = TrimPath.processDOMTemplate("temp", data);
  26. document.getElementById("ShowDiv").innerHTML = result;
  27. </script>

  结合.Net MVC后台程序再来一把:

  1. using System;
  2. using System.Collections.Generic;
  3. using System.Linq;
  4. using System.Web;
  5. using System.Web.Mvc;
  6.  
  7. namespace 测试jQuery_EasyUI.Controllers
  8. {
  9. [HandleError]
  10. public class HomeController : Controller
  11. {
  12. public ActionResult Index()
  13. {
  14. return View();
  15. }
  16.  
  17. public ActionResult GetJson()
  18. {
  19. Person p1 = new Person(1, "刘备", 30);
  20. Person p2 = new Person(2, "关羽", 28);
  21. Person p3 = new Person(3, "张飞", 36);
  22. List<Person> ListPerson = new List<Person>();
  23. ListPerson.Add(p1);
  24. ListPerson.Add(p2);
  25. ListPerson.Add(p3);
  26. return Json(ListPerson,JsonRequestBehavior.AllowGet);
  27. }
  28. }
  29.  
  30. public class Person
  31. {
  32. public Person(int id, string name, int age) { Id = id; Name = name; Age = age; }
  33.  
  34. public int Id { get; set; }
  35.  
  36. public string Name { get; set; }
  37.  
  38. public int Age { get; set; }
  39. }
  40. }

  前台代码:

  1. <%@ Page Language="C#" Inherits="System.Web.Mvc.ViewPage" %>
  2.  
  3. <html>
  4. <head>
  5. <title>TrimPath学习测试</title>
  6. <script src="../../Scripts/jquery.min.js" type="text/javascript"></script>
  7. <script src="../../Scripts/trimpath/template.js" type="text/javascript"></script>
  8.  
  9. </head>
  10. <body>
  11. <div id="ShowDiv">
  12. </div>
  13. <textarea id="temp" style="display: none;">
  14.  
  15. <table width="400" cellspacing="0" cellpadding="0" border="1">
  16. <tr>
  17. <td>Id</td>
  18. <td>姓名</td>
  19. <td>年龄</td>
  20. </tr>
  21. {for i in data}
  22. <tr>
  23. <td>${i.Id}</td>
  24. <td>${i.Name}</td>
  25. <td>${i.Age}</td>
  26. </tr>
  27. {/for}
  28. </table>
  29. </textarea>
  30. </body>
  31. </html>
  32.  
  33. <script type="text/javascript">
  34. var data;
  35.  
  36. $(function() {
  37. $.ajax({
  38. url: "/Home/GetJson",
  39. type: 'post',
  40. async: true,
  41. dataType: 'json',
  42. success: function(response) {
  43. data = response;
  44. var result = TrimPath.processDOMTemplate("temp", data);
  45. document.getElementById("ShowDiv").innerHTML = result;
  46. }
  47. })
  48. })
  49. </script>

  输出结果如下:

  

TrimPath - Js模板引擎的更多相关文章

  1. JST(JavaScript Trimpath)前端模板引擎简介

    JST(JavaScript Trimpath)前端模板引擎简介及应用 今天在做某系统日志列表的时候用到了这个玩意儿.刚开始只是根据别人的例子照葫芦画瓢完成了日志列表及对应详情,晚上有空了才仔细去网上 ...

  2. js模板引擎介绍搜集

    js模板引擎越来越多的得到应用,如今已经出现了几十种js模板引擎,国内各大互联网公司也都开发了自己的js模板引擎(淘宝的kissy template,腾讯的artTemplate,百度的baiduTe ...

  3. doT js 模板引擎【初探】要优雅不要污

    js中拼接html,总是感觉不够优雅,本着要优雅不要污,决定尝试js模板引擎. JavaScript 模板引擎 JavaScript 模板引擎作为数据与界面分离工作中最重要一环,越来越受开发者关注. ...

  4. 各种JS模板引擎对比数据(高性能JavaScript模板引擎)

    最近做了JS模板引擎测试,拿各个JS模板引擎在不同浏览器上去运行同一程序,下面是模板引擎测试数据:通过测试artTemplate.juicer与doT引擎模板整体性能要有绝对优势: js模板引擎 Ja ...

  5. JS 模板引擎 BaiduTemplate 和 ArtTemplate 对比及应用

    最近做项目用了JS模板引擎渲染HTML,JS模板引擎是在去年做项目是了解到的,但一直没有用,只停留在了解层面,直到这次做项目才用到,JS模板引擎用了两个 BaiduTemplate 和 ArtTemp ...

  6. 掌握js模板引擎

    最近要做一个小项目,不管是使用angularjs还是reactjs,都觉得大材小用了.其实我可能只需要引入一个jquery,但想到jquery对dom的操作,对于早已习惯了双向绑定模式的我,何尝不是一 ...

  7. js模板引擎

    js模板引擎包括如下: template 官方参考:http://aui.github.io/artTemplate BaiduTemplate 官方参考:http://baidufe.github. ...

  8. 调研js模板引擎

    js模板引擎越来越多的得到应用,如今已经出现了几十种js模板引擎,国内各大互联网公司也都开发了自己的js模板引擎(淘宝的kissy template,腾讯的artTemplate,百度的baiduTe ...

  9. Filter - Surge.js模板引擎过滤器

    版权所有,转载请注明出处:http://guangboo.org/2014/01/05/filter-surgejs-template-engine 过滤器在surge.js模板引擎中多处用到,其类似 ...

随机推荐

  1. BZOJ 2436 NOI嘉年华(单调优化)

    http://www.lydsy.com/JudgeOnline/problem.php?id=2436 题意:两个会场不能同时表演,但是同一个时间可以同时表演,要求让两个会场表演数量最小的最大,然后 ...

  2. HDU 2222 Keywords Search (AC自动机)

    题意:就是求目标串中出现了几个模式串. 思路:用int型的end数组记录出现,AC自动机即可. #include<iostream> #include<cstdio> #inc ...

  3. 《Programming WPF》翻译 第8章 4.关键帧动画

    原文:<Programming WPF>翻译 第8章 4.关键帧动画 到目前为止,我们只看到简单的点到点的动画.我们使用了To和From属性或者By属性来设计动画--相对于当前的属性值.这 ...

  4. 制作安装包工具NSIS

    NSIS 下载地址: http://nsis.sourceforge.net/Download 编辑工具:NIS Edit 下载地址: http://soft.hao123.com/soft/appi ...

  5. mysql 中文配置(转)

    Dos下连接mysql后,运行一下几项就可以插入中文了: SET character_set_client = gbk; SET character_set_connection = gbk; SET ...

  6. java框架BeanUtils及路径问题练习

    内省----->一个变态的反射    BeanUtils主要解决 的问题: 把对象的属性数据封装 到对象中.  使从文件中读取的数据往对象中赋值更加简单:   BeanUtils的好处:  1. ...

  7. Linux基本操作 2-----Linux文件系统基本结构

    Linux的文件系统结构             Linux文件系统为一个倒转的单根树状结构 文件系统的根为"/" 文件系统严格区分大小写 路径使用“/”来分割,在windows使 ...

  8. 第04章-VTK基础(4)

    [译者:这个系列教程是以Kitware公司出版的<VTK User's Guide -11th edition>一书作的中文翻译(出版时间2010年,ISBN: 978-1-930934- ...

  9. java第二周学习日记

    day01 1.抽象类 (1)抽象类的应用场景: 我们在描述一类事物的时候,发现该种事物确实存在着某种行为,但是这种行为目前不是具体的,那么我们可以抽取这种行为的声明,但是不去实现该种行为,这时候这种 ...

  10. Android编译过程详解(三)

    前面两节讲解了自定义Android编译项和创建Product产品配置文件,除了编译和定义产品相关环境变量外,还需要定义Board相关环境变量. 1. build/core/config.mk 109 ...