TrimPath - Js模板引擎

当页面中引用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‘,
                success: function(response) {
                    data = response;
                    var result = TrimPath.processDOMTemplate("temp", data);
                    document.getElementById("ShowDiv").innerHTML = result;
                }
            })
        })
</script>

  输出结果如下:

  

时间: 2024-10-19 16:51:27

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

Trimpath Template 及JS模板引擎原理

这个是一个很老的JS模板引擎.看了下源码,理解下模拟条件语句的替换原则.感觉有点复杂~ 简记之. 如果不涉及条件语句,可以直接在代码里构建模板,ajax请求回来的数据套用即可.最原始方式. Trimpath JavaScript 是个轻量级的,基于JavaScript的,跨浏览器,采用APL/GPL开放源代码协议的,可以让你轻松进行基于模板编程方式的纯JS引擎. 它有如下的特点: 1.采用标准的JavaScript编写,支持跨浏览器 2.模板语法类似于:FreeMarker,Velocity,S

js模板引擎介绍搜集

js模板引擎越来越多的得到应用,如今已经出现了几十种js模板引擎,国内各大互联网公司也都开发了自己的js模板引擎(淘宝的kissy template,腾讯的artTemplate,百度的baiduTemplate等),如何从这么多纷繁的模板引擎中选择一款适合自己的呢,笔者最近对主流的js模板引擎(mustache,doT,juicer,artTemplate,baiduTemplate,Handlebars,Underscore)做了一番调研,分享出来希望对大家有用. 从这几个指标来比较js模板

js模板引擎--artTemplate

js模板引擎--artTemplate 以前研究过一段时间的handlebars,但因为其渲染性能略逊于腾讯的artTemplate(在artTemplate的GitHub官网上有推荐的性能测试地址),貌似最近耳边听到得最多的模板引擎也就是artTemplate了,所以就花个时间来研究下吧... artTemplate是新一代的javascript模板引擎,若采用拥有V8引擎的chrome浏览器进行测试,其渲染性能甚至能达到知名模板引擎Mustache的20倍以上以及模板引擎tmpl的40倍以上

JS模板引擎

JS模板引擎 :ArtTemplate 1.为什么需要用到模板引擎 我们在做前端开发的时候,有时候经常需要根据后端返回的json数据,然后来生成html,再显示到页面中去. 例如这样子: var data = [ {text: "测试一"}, {text: "测试二"}, {text: "测试三"}, {text: "测试四"} ]; function generateList(data) { var listHtml = &

调研js模板引擎

js模板引擎越来越多的得到应用,如今已经出现了几十种js模板引擎,国内各大互联网公司也都开发了自己的js模板引擎(淘宝的kissy template,腾讯的artTemplate,百度的baiduTemplate等),如何从这么多纷繁的模板引擎中选择一款适合自己的呢,笔者最近对主流的js模板引擎(mustache,doT,juicer,artTemplate,baiduTemplate,Handlebars,Underscore)做了一番调研,分享出来希望对大家有用. 从这几个指标来比较js模板

js模板引擎原理,附自己写的简洁模板引擎

js处理DOM交互非常普遍,但DOM结构单纯用js字符串拼接简直难以维护,不方便理解和扩展. 下面展现了js模板引擎的实现原理: html中的模板 <script id="mytpl"> <div> 我的名字是:$name$ <br/> 今年$age$了! </div> </script> 因为script不会被浏览器解析和渲染,最大限度节省了浏览器资源,textarea标签同样可以达到效果.Template标签就是这样的目的

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

最近做了JS模板引擎测试,拿各个JS模板引擎在不同浏览器上去运行同一程序,下面是模板引擎测试数据:通过测试artTemplate.juicer与doT引擎模板整体性能要有绝对优势: js模板引擎 JavaScript 模板引擎作为数据与界面分离工作中最重要一环,越来越受开发者关注,从而出现在各大型网站 Twitter.淘宝网.新浪浪微博.腾讯QQ空间.腾讯微博等.那么他们各自性能怎么样?请看下面. 通常模板引擎 baiduTemplate(百度)\artTemplate(腾讯)\juicer(淘

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

最近做项目用了JS模板引擎渲染HTML,JS模板引擎是在去年做项目是了解到的,但一直没有用,只停留在了解层面,直到这次做项目才用到,JS模板引擎用了两个 BaiduTemplate 和 ArtTemplate. 项目之初用的是BaiduTemplate引擎,项目完成后发布到互联网,发现数据量大时,加载速度慢了点,就考虑换其它模板引擎是否能提高渲染效率,在网上查找.对比后发现ArtTemplate更好一点,就深入了解与学习了下,两个引擎语法有点差别,但结果是一至的,下面具体介绍一下两个引擎的使用情

掌握js模板引擎

最近要做一个小项目,不管是使用angularjs还是reactjs,都觉得大材小用了.其实我可能只需要引入一个jquery,但想到jquery对dom的操作,对于早已习惯了双向绑定模式的我,何尝不是一种痛苦. 听过这样一句话:"技术没有缺席,只有姗姗来迟",很多技术自己不知道,并非没有.今天我想介绍的就是一个简单的js模板引擎artTemplate,让我们扬帆起航吧- 一.概述 artTemplate 是新一代 javascript 模板引擎,它采用预编译方式让性能有了质的飞跃,并且充