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 οnchange="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>
復制代碼

  輸出結果如下:

  

轉載于:https://www.cnblogs.com/zhishaofei/p/5733164.html

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/286747.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/286747.shtml
英文地址,請注明出處:http://en.pswp.cn/news/286747.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

appserv安裝

Appserv 官網: http://www.appservnetwork.com/ 安裝好后&#xff0c;輸入http://localhost:8082/驗證是否裝成功&#xff0c;成功后如下圖 http://localhost:8082/ 默認指定的文件夾是 進入到phpMyAdmin 的賬號是root&#xff0c;密碼是安裝時的密碼

一、iVX簡介(IVX 快速開發教程)

一、iVX簡介 通過本節你將對 iVX 有一個大致的認識&#xff0c;并且了解 iVX 能夠做些什么&#xff0c;有哪一些優勢&#xff0c;這將幫助你更好的上手 iVX 進行應用的開發&#xff0c;初步了解 iVX 的強大之處。 文章目錄一、iVX簡介1.1 iVX 是什么&#xff1f;1.2 iVX適合怎…

WPF效果第一百八十六篇之又玩ListBox

大周末的接著上一篇玩耍TreeView,這二天又再次去玩耍ListBox;畢竟是我的最愛,沒辦法就喜歡玩耍他;閑話也不多扯了,直接看咱們最終效果:2、原來一直ItemTemplate,這次直接ListBoxItem的Template:<Setter Property"Template"><Setter.Value><ControlTem…

Android之URL “page={page}category_id={***} string For dynamic query parameters use @Query.

1、問題 我們用retrofit進行Get網絡請求的時候&#xff0c;我代碼是這樣寫的 GET("/api/get_****/***?page{page}&category_id{category_id}")suspend fun getWebsiteCategory(Path("page") page: Int, Path("category_id") category_id: …

【VB測繪程序設計】第三章 VB結構化程序設計(順序、選擇、循環)

目 錄 第一節 順序結構設計 第二節 選擇結構設計 第三節 循環結構設計 第一節 順序結構設計 一、賦值語句

React-引領未來的用戶界面開發框架-讀書筆記(七)

第14章 開發工具 React使用了若干的抽象層來幫助你更輕松地開發組件、推導程序狀態。然而&#xff0c;在調試、構建及分發應用時&#xff0c;這樣設計就會產生負面影響了。 幸運的是&#xff0c;我們擁有一些非常好的開發工具能在開發及構建過程中為我們提供幫助。在這里探討這…

【十分鐘】學會微信小游戲,攀登不止小游戲制作(IVX 快速開發教程十一)

十一、攀登不止小游戲制作 制作微信小游戲大致流程與微信小程序、Web類似&#xff0c;不同的在于是組件的使用。我們此節需要完成的小游戲需求為&#xff1a; 小球觸碰矩形塊會跳躍或攀爬小球觸碰頂部或底部游戲結束點擊屏幕將會使小球朝著該方向移動小球進行跳躍時分數會增加…

十天沖刺---Day8

站立式會議 站立式會議內容總結&#xff1a;燃盡圖照片最近思考一個問題。項目是怎么進行到這一步的。算了&#xff0c;這個發在明天的沖刺總結吧。。還需繼續努力&#xff0c;隊友快回來快回來。。轉載于:https://www.cnblogs.com/imguang/p/4965054.html

Android之去掉RecycleView和NestedScrollView邊緣效果

1 問題 使用RecycleView和NestedScrollView的時候&#xff0c;滑倒頂部或者底部&#xff0c;會有邊緣效果&#xff0c;就像水溫波一樣&#xff0c;現在需求去掉 2 解決辦法 在RecycleView和NestedScrollView的xml文件里面加上如下屬性即可。 android:overScrollMode"nev…

Action過濾器重構

&#xff08;注&#xff1a;本文參照 NickChapsas的Attributes get a feature long-overdue in C# 11&#xff09;今天看一個泛型特性的例子&#xff0c;這個功能在C#11才受支持。在asp.net core mvc中&#xff0c;可以給action添加filter&#xff0c;達到攔截作用&#xff0c;…

征集對Oracle的問題

兩月前收到Oracle的邀請&#xff0c;10.10-16日參加在舊金山舉辦Oracle Open World 2009&#xff0c;旅程連上了長假。很榮幸&#xff0c;我是中國惟一入選的博客&#xff08;感謝小松and北北&#xff0c;還有小廢物同學經年累月的鞭策和誘導&#xff0c;北北同學的誘導尤其受用…

一篇文學會商用可編輯問卷表單制作【iVX 十二】

公共表單 在 iVX 快速教程中&#xff0c;我們使用一個公共表單項目作為 WebApp 應用的演示說明。公共表單項目可以用于企業內部或一個問卷公共平臺做問卷調查&#xff0c;用戶可以自由的設置表單元素以及樣式&#xff0c;并且可以手動設置表單結束下載填寫問卷后的調查數據。 …

【地圖學】地圖投影的定義和分類

一、地圖投影 1、地圖投影的定義 地圖投影是利用一定數學法則把地球表面的經、緯線轉換到平面上的理論和方法。 2、地圖投影的分類 (1)按變形性質 ? 等角投影: 投影面上兩微分線段的夾角與地面上的相應兩線段的夾角相等,及沒有角度變形的投影叫 ~ 。

React-引領未來的用戶界面開發框架-讀書筆記(八)

第16章 架構模式 React主要功能在于渲染HTML。可以將其看成是MVC中的V&#xff0c;它不會影響到組件中直接調用AJAX請求之類的操作&#xff1a; var TakeSurveyReact.CreateClass({getInitialData&#xff1a;function(){return{survey:null}&#xff1b;},componentDidMount:…

三)mybatis 二級緩存,整合ehcache

mybatis-config.xml <setting name"cacheEnabled" value"true" /> PersonMapper.xml <?xml version"1.0" encoding"UTF-8" ?> <!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http:…

confluence5.8.10的使用

之前在windows上安裝了confluence5.8.10,結果有一天知什么緣故&#xff0c;數據庫數據損壞&#xff0c;知識庫徹底打不開了&#xff0c;所有的文檔都付之東流&#xff0c;真的不是一般心痛。因此考慮將其裝到linux機器上&#xff0c;因為tomcat和mysql實際上都為了linux而生的&…

Android之提示Unable to get provider com.google.android.gms.ads.MobileAdsInitProvider

1 問題 接入SDK提示錯誤如下 java.lang.RuntimeException: Unable to get provider com.google.android.gms.ads.MobileAdsInitProvider: java.lang.IllegalStateException: 2 解決辦法 在AndroidManifest.xml文件下面配置如下 在application目錄下面配置如下&#xff0c;…

RPA之PAD(Power Automate Desktop)組件開發

本文由網友藍創精英團隊投稿&#xff0c;歡迎轉載、分享原文作者&#xff1a;藍創精英團隊原文鏈接&#xff1a;https://blog.csdn.net/i2blue/article/details/125040323其實&#xff0c;PAD&#xff0c;現在官方文檔還沒有對外組件式或者插件式開發接口。但是&#xff0c;有一…

【地圖學】高斯-克呂格(Gauss-Kruger)投影原理、應用詳解(3°帶、6°帶)

一、高斯克呂格投影概述 德國數學家、物理學家、天文學家高斯于19 世紀20 年代擬定,后經德國大地測量學家克呂格于1912 年對投影公式加以補充,故稱為高斯-克呂格投影(Gauss-Kruger,簡稱GK),又名"等角橫切橢圓柱投影”。中央經線和赤道投影為相互垂直的直線,其它經線…

Linux安裝 微信開發者工具(deepin linux ubt)

一.環境:: deepin linux15.4.1 二.安裝過程: 2.1 安裝wine sudo apt-get install wine 2.2 安裝nwjs-sdk 2.2.1 下載linux版nwjs-sdk wget https://dl.nwjs.io/v0.25.4/nwjs-sdk-v0.25.4-linux-x64.tar.gz 2.2.2 解壓nwjs-sdk tar xvf nwjs-sdk-v0.25.4-linux-x64.tar.gz 2.2…