一、基本概念
上一篇我們簡單的介紹了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="https://www.cnblogs.com/hnvvv/p/${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 教程:基礎篇之語法
全部章節寫完后,會再補齊全部目錄
jntemplate原始碼下載
- gitee:https://gitee.com/jiniannet/jntemplate
- github:https://github.com/jiniannet/jntemplate
轉載請註明出處,本文鏈接:https://www.uj5u.com/net/266173.html
標籤:ASP.NET
