• .net 开源模板引擎jntemplate 教程:基础篇之语法


    一、基本概念

    上一篇我们简单的介绍了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#里面的ifelse 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。

    目录:

    1. .net 开源模板引擎jntemplate 教程:基础篇之入门
    2. .net 开源模板引擎jntemplate 教程:基础篇之语法

    全部章节写完后,会再补齐全部目录

    jntemplate源码下载

        
    如无特殊说明,本博文章均属原创,转载请注明作者:翅膀的初衷 与出处: http://www.cnblogs.com/hnvvv
  • 相关阅读:
    转:详解iPhone Tableview分批显示数据 点击加载更多
    能不写全局变量就不写全局变量。
    ios 打电话 一键拨号
    下一步目标:整理出1套相对成熟的ios 开发框架
    dispatch_sync 线程 GCD iOS
    iOS 播放声音 最简单的方法
    判断 网络是否通常,以及判断用户使用的网络类型,时2G\3G\还是wifi
    ios 特效 新思路 :加载gif 动画,然后在动画上增加点击事件即可。
    Oracle小技巧
    excel导出时”内存或磁盘空间不足“错误的解决方法
  • 原文地址:https://www.cnblogs.com/hnvvv/p/14483470.html
Copyright © 2020-2023  润新知