一、基本概念
上一篇我們簡單的介紹了jntemplate並寫了一個hello world(如果沒有看過的,點選檢視),本文將繼續介紹jntemplate的模板語法。
我們在講解語法前,首先要了解一下標籤的概念。在jntemplate中,標籤特指用來包含模板程式碼的語法塊,它是基本的呈現單元,在模板解析完成後,該語法塊將會被替換成具體的資料或者內容。
標籤通常使用${
開頭,並且以}
結尾,絕大部分標籤可以省略大括號進行簡寫,如${model.UserName}
可以簡寫為 $model.UserName
下面將重點介紹幾個常用的語法標籤:
注意:標籤的符號是可以自定義的,比如你可以自定義為
{{model.UserName}}
或者@{model.UserName}
,本文為了方便講解,僅以預設配置為準。
二、變數
用法:用於在模板中輸出一個變數,該變數可以是任何物件。如:${var}
,可以簡寫為$var
,其中var
為變數名,變數名只能是字母,下劃線與數字的組合,且必須以字母開頭。
例:
var template = Engine.CreateTemplate("<h1>$title</h1>!");
template.Set("title", "jntemplate");
template.Render(Console.Out);
三、屬性與欄位
用法: 用於訪問物件屬性或者欄位,用法與c#
類似,欄位與屬性必須是公開的(public
),v2.0.0 中暫時不支援匿名物件的訪問。如:${model.Name}
,可以簡寫為$model.Name
.
例一:
var template = Engine.CreateTemplate("<h1>$model.Title</h1>!");
template.Set("model", new Site{ Title="jntemplate" });
template.Render(Console.Out);
如果訪問靜態屬性或欄位,需要通過template.SetStaticType(...)
來指定靜態物件型別。
例二:
var templateContent = "${DateTime.Now}";
var template = Engine.CreateTemplate(templateContent);
template.SetStaticType("DateTime", typeof(DateTime));
template.Render(Console.Out);
! 注意:當前版本暫時不支援匿名物件訪問。
四、索引
用法:用於訪問陣列或者IList<T>
及其它支援索引的物件,用法與c#
類似,如${arr[1]}
例:
var template = Engine.CreateTemplate("${arr[0]}");
template.SetStaticType("arr", new int[]{ 1,2,3});
template.Render(Console.Out);
五、函式方法
用法:用於呼叫物件例項方法,靜態方法,或者委託。如:${func(p1,p2....) }
,可以簡寫為$func(p1,p2....)
。
注意:方法必須是公開的(public
),如果是私有的(private
)則無法訪問。
例一(例項方法):
Class1類
public class Class1
{
public int Add(int a,int b)
{
return a+b;
}
}
模板程式碼:
var template = Engine.CreateTemplate("$obj.Add(1,2)");
template.Set("obj", new Class1());
template.Render(Console.Out);
例二(靜態方法):
var templateContent = "${string.Concat(\"str1\",\"str2\")}";
var template = Engine.CreateTemplate(templateContent);
template.SetStaticType("string", typeof(string));
template.Render(Console.Out);
例三(委託方法):
var template = Engine.CreateTemplate("$add(8,-2)");
template.Set<Func<int, int, int>>("add", (x, y) =>
{
return x + y;
});
template.Render(Console.Out);
六、邏輯判斷(IF)
用法:用於處理程式碼邏輯,等同於c#
裡面的if
與else if
,支援以下邏輯運算子:大於(>)
,小於(<)
,大於等於(>=)
,小於等於(<=)
,等於(==)
,不等於(!=)
,或者(||)
, 並且(&&)
。
例一:
模板:demo.html
<span>
$if(id>0)
編號大於零
$elif(id==0)
編號等於零
$else
編號小於零
$end
</span>
後臺程式碼:
var template = Engine.LoadTemplate(@"c:\demo.html");
template.Set("id",15);
template.Render(Console.Out);
注意:
else if
可以寫作$elseif
也可以寫作$elif
。標籤必須以$end
結束
七、列表迭代(Foreach)
用法:用來遍歷輸出一個列表,等同於c#
中foreach
,目標可以是陣列或者實現了IEnumerable
介面的任意物件.
例一:
模板:demo.html
$foreach(model in list)
<ul>
<li><a href="${model.Url}">${model.Title}</a></li></li>
</ul>
$end
var template = Engine.LoadTemplate(@"c:\demo.html");
template.Set("list",new NewInfo[]{ ... });
template.Render(Console.Out);
$foreach(model in list)
也可以寫作$for(model in list)
,必須使用$end
結束標籤。
八、模板引用
用法:用於引用某一個公共模板,有二種寫法$load("路徑")
與$inclub("路徑")
:
- load 引用並解析模板
- inclub:引用模板(不解析),適用於不需要解析的檔案,比如JS,CSS等
例:
$load("public/header.html")
<div>這是內容</div>
九、總結
本文介紹了jntemplate常用的模板語法,包括變數,屬性,方法,邏輯判斷,迭代與模板引用這幾大塊,只要靈活組合使用,完全可以滿足日常開發了。
部分不怎麼常用的語法大家可以自行可以參考官方文件。
下一節,我們將介紹如何在asp.net mvc中使用jntemplate。
目錄:
- .net 開源模板引擎jntemplate 教程:基礎篇之入門
- .net 開源模板引擎jntemplate 教程:基礎篇之語法
全部章節寫完後,會再補齊全部目錄