前言
有些项目会需要让 end user 写模板 (rich text) 同时又需要做一些 data binding. 这几乎是 programmer 的工作了...
在 C#, 大可以使用 Razor Engine 来处理. 但是它对 end user 来说太 advance 了. 而且一般上 end user 只是想做简单的 data binding 和一些 simple 的 logic 而已.
于是就出现了许多比较简单的 template engine.
Template Engine Syntax
耳熟能详的有 EJS, handlebars, mustache, Liquid, 我觉得 React JSX 应该也可以算是一种吧.
EJS 的特点是 <% %> 符号, 它支持所以 js 语法.
handlebars 长这样
mustache, 它的特点是没有 if, for in 这些语法, 它用一些巧妙的招数来实现, 比如下面这个 if 逻辑, person 是一个 boolean
Liquid 是大名鼎鼎的电商系统 shopify 推出的.
npm tread 对比
比这个没有意思, 只是作为参考而已.
比语法的话, 我会倾向于 mustache 和 Liquid. 看上去舒服, end user 学起来也相对简单.
.NET Environment
市场怎样和 .NET 怎样是差很远的. 毕竟 .NET 是一个很冷门的东西. 外面世界总是美丽的.
.NET 有几款 template engine, 最多 star (1.7k) 的是 scriban. 其它的参考: Benchmarks
它虽然是自己的语法, 但是和 Liquid 非常相识, 而且也部分支持 Liquid 语法.
Get Started
安装
dotnet add package Scriban --version 5.0.0
对象 data binding
var template = Template.ParseLiquid("Hello {{ product.name }}!"); var result = template.Render(new { Product = new { Name = "Product 1" } }); Console.WriteLine(result);
if logic
var template = Template.Parse(@" {{ if product.name == 'Product 1' }} This is a variable with 1 {{ end }} "); var result = template.Render(new { Product = new { Name = "Product 1" } }); Console.WriteLine(result.Trim());
其它的... TODO 等用到才补.