上一篇咱们简单的介绍了jntemplate并写了一个hello world(若是没有看过的,点击查看),本文将继续介绍jntemplate的模板语法。html
咱们在讲解语法前,首先要了解一下标签的概念。在jntemplate中,标签特指用来包含模板代码的语法块,它是基本的呈现单元,在模板解析完成后,该语法块将会被替换成具体的数据或者内容。git
标签一般使用${
开头,而且以}
结尾,绝大部分标签能够省略大括号进行简写,如${model.UserName}
能够简写为 $model.UserName
github
下面将重点介绍几个经常使用的语法标签:c#
注意:标签的符号是能够自定义的,好比你能够自定义为
{{model.UserName}}
或者@{model.UserName}
,本文为了方便讲解,仅以默认配置为准。数组
用法:用于在模板中输出一个变量,该变量能够是任何对象。如:${var}
,能够简写为$var
,其中var
为变量名,变量名只能是字母,下划线与数字的组合,且必须以字母开头。mvc
例:asp.net
var template = Engine.CreateTemplate("<h1>$title</h1>!"); template.Set("title", "jntemplate"); template.Render(Console.Out);
用法: 用于访问对象属性或者字段,用法与c#
相似,字段与属性必须是公开的(public
),v2.0.0 中暂时不支持匿名对象的访问。如:${model.Name}
,能够简写为$model.Name
.函数
例一:spa
var template = Engine.CreateTemplate("<h1>$model.Title</h1>!"); template.Set("model", new Site{ Title="jntemplate" }); template.Render(Console.Out);
若是访问静态属性或字段,须要经过template.SetStaticType(...)
来指定静态对象类型。.net
例二:
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);
用法:用于处理代码逻辑,等同于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
结束
用法:用来遍历输出一个列表,等同于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("public/header.html") <div>这是内容</div>
本文介绍了jntemplate经常使用的模板语法,包括变量,属性,方法,逻辑判断,迭代与模板引用这几大块,只要灵活组合使用,彻底能够知足平常开发了。
部分不怎么经常使用的语法你们能够自行能够参考官方文档。
下一节,咱们将介绍如何在asp.net mvc中使用jntemplate。
所有章节写完后,会再补齐所有目录