1. 程式人生 > >.net 開源模板引擎jntemplate 教程:基礎篇之語法

.net 開源模板引擎jntemplate 教程:基礎篇之語法

## 一、基本概念 上一篇我們簡單的介紹了jntemplate並寫了一個hello world(如果沒有看過的,[點選檢視](https://www.cnblogs.com/hnvvv/p/14476803.html)),本文將繼續介紹jntemplate的模板語法。 我們在講解語法前,首先要了解一下標籤的概念。在jntemplate中,標籤特指用來包含模板程式碼的語法塊,它是基本的呈現單元,在模板解析完成後,該語法塊將會被替換成具體的資料或者內容。 標籤通常使用`${`開頭,並且以`}`結尾,絕大部分標籤可以省略大括號進行簡寫,如`${model.UserName}` 可以簡寫為 `$model.UserName` 下面將重點介紹幾個常用的語法標籤: > 注意:標籤的符號是可以自定義的,比如你可以自定義為`{{model.UserName}}` 或者`@{model.UserName}`,本文為了方便講解,僅以預設配置為準。 ## 二、變數 用法:用於在模板中輸出一個變數,該變數可以是任何物件。如:`${var}`,可以簡寫為`$var`,其中`var` 為變數名,變數名只能是字母,下劃線與數字的組合,且必須以字母開頭。 **例:** ```csharp var template = Engine.CreateTemplate("

$title

!"); template.Set("title", "jntemplate"); template.Render(Console.Out); ``` ## 三、屬性與欄位 用法: 用於訪問物件屬性或者欄位,用法與`c#`類似,欄位與屬性必須是公開的(`public`),v2.0.0 中暫時不支援匿名物件的訪問。如:`${model.Name}`,可以簡寫為`$model.Name`. **例一:** ```csharp var template = Engine.CreateTemplate("

$model.Title

!"); template.Set("model", new Site{ Title="jntemplate" }); template.Render(Console.Out); ``` 如果訪問靜態屬性或欄位,需要通過`template.SetStaticType(...)`來指定靜態物件型別。 **例二:** ```csharp var templateContent = "${DateTime.Now}"; var template = Engine.CreateTemplate(templateContent); template.SetStaticType("DateTime", typeof(DateTime)); template.Render(Console.Out); ``` >
! 注意:當前版本暫時不支援匿名物件訪問。 ## 四、索引 用法:用於訪問陣列或者`IList`及其它支援索引的物件,用法與`c#`類似,如`${arr[1]}` **例:** ```csharp 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類** ```csharp public class Class1 { public int Add(int a,int b) { return a+b; } } ``` **模板程式碼:** ```csharp var template = Engine.CreateTemplate("$obj.Add(1,2)"); template.Set("obj", new Class1()); template.Render(Console.Out); ``` **例二(靜態方法):** ```csharp var templateContent = "${string.Concat(\"str1\",\"str2\")}"; var template = Engine.CreateTemplate(templateContent); template.SetStaticType("string", typeof(string)); template.Render(Console.Out); ``` **例三(委託方法):** ```csharp var template = Engine.CreateTemplate("$add(8,-2)"); template.Set>("add", (x, y) => { return x + y; }); template.Render(Console.Out); ``` ## 六、邏輯判斷(IF) 用法:用於處理程式碼邏輯,等同於`c#`裡面的`if`與`else if `,支援以下邏輯運算子:`大於(>)`,`小於(<)`,`大於等於(>=)`,`小於等於(<=)`,`等於(==)`,`不等於(!=)`,`或者(||)`, `並且(&&)`。 **例一:** 模板:demo.html ```html $if(id>0) 編號大於零 $elif(id==0) 編號等於零 $else 編號小於零 $end ``` 後臺程式碼: ```csharp 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 ```html $foreach(model in list)
  • ${model.Title}
$end ``` ```csharp 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等 **例:** ```html $load("public/header.html") 這是內容 ``` ## 九、總結 本文介紹了jntemplate常用的模板語法,包括變數,屬性,方法,邏輯判斷,迭代與模板引用這幾大塊,只要靈活組合使用,完全可以滿足日常開發了。 部分不怎麼常用的語法大家可以自行可以參考官方文件。 下一節,我們將介紹如何在asp.net mvc中使用jntemplate。 ## 目錄: 1. [.net 開源模板引擎jntemplate 教程:基礎篇之入門](https://www.cnblogs.com/hnvvv/p/14476803.html) 2. .net 開源模板引擎jntemplate 教程:基礎篇之語法 > 全部章節寫完後,會再補齊全部目錄 ## jntemplate原始碼下載 - gitee: - github: