NVelocity 模板引擎

 

一、NVelocity 是什么?

NVolecity 是一套基于.Net,利用反射技术实现的模板引擎,它允许任何人通过模板语言调用.Net代码定义的对象,作用在于将 后台代码从Web页面中分离出来,便于对Web页面的长期维护,同时给我们在aspx之外提供了一个更好的可选方案。

 

二、NVelocity 怎么用?

    使用 $ 字符开始的 reference 表示你要获取什么,使用 # 字符开始的 directives 用于你要做些什么
 
    1. 注释的使用
        I. 单行注释
                ##单行注释
        II. 多行注释
                 #*多行
                    注释*#
        III. 文档格式:
                #**
                    This is a VTL comment block and may be used to store such information
                  as the document auther and versioning information:
                   @version:5
                   @auther: Mr Temmo
                **#
    2. References
            VTL 中的 references 有三种:① 变量(variables) ② 属性(properties) ③ 方法(methods),前后端必须就这些 references的命名 达成一致
            I. 引用变量:$customer.Address
            II. 引用方法:$customer.getAddress()
 
          ● References 的正式标记法是在外面加大括号,如:{$customer.Address}
          ● 如果一个变量在没有值的情况下,你想让他以一个空白符替代,而不是显示VTL模板语言,你应该这样使用 $!temp 或者这样 {$!temp}
          ● VTL中的转移字符为 "\",也就是反斜杠,如即使你定义了 #set($foo="1234"),这时你想原样输出$foo ,那么你这样写:\$foo 
 
        3. 字符串
              ● 字符串拼接
                  #set($temp1="AA")
                  #set($temp2="BB")
                  #set($output="$temp1$temp2")
                  $output
         4. 判断循环
              ● 判断
                  #if()
                      xxxxx
                  #elseif()
                      xxxxxx
                  #end
                ● 循环
                #foreach($item in $list)
                    #each
                        $item.Name
                    #nodata
                        没有数据
                #end
          5. 使用字符串作为Template模板实例
 
             string model = @" 
                    发件人: $from </br>
                    收件人: $to </br>
                    主题: $subject </br>
                    有以下的学生 </br>
                    #foreach($s in $stuList) 
                    #if($s=='')
                        没有名字 </br>
                    #else 
                    $s </br>
                    #end 
                    #end 
                    "; 
            VelocityEngine vltEngine=new VelocityEngine();
            vltEngine.Init();
            VelocityContext vltContext = new VelocityContext();
            vltContext.Put("from", "Temmo");
            vltContext.Put("to", "大家");
            vltContext.Put("subject", "一个例子");
            vltContext.Put("stuList", new string[]{"AAAA","BBBB"});
            StringWriter vltWriter=new StringWriter();
            vltEngine.Evaluate(vltContext, vltWriter, null, model);

            Response.Write(vltWriter.GetStringBuilder().ToString());

 

输出结果:
         发件人: Temmo 
收件人: 大家 
主题: 一个例子 
有以下的学生 
AAAA 
BBBB 
 
            6. NVelocity 语法
                I. Set:开始做什么事
                II. Foreach:迭代循环
                III. If:条件判断
                IV. Else:选择判断
                V. End:结束一个木块
                VI. Include:对外部文件引用,不会通过NVelocity引擎
                VII. Parse:对外部文件引用,会通过NVelocity引擎
                VIII. Macro:创建宏,可以重复做某件事
                IX. Even:双数执行
                X. Odd:单数执行
                XI. Each:每次都执行
                XII. Stop:停止引擎对文件的解析
 
            7. 使用实例
                I. Macro 
                    #macro(Add $a $b) 
 #set($c = $a + $b) 
  <p>最后结果$c</p> 
#end 
 
#Add(1 3)
 
                    输出结果:最后结果4
                II. 引入文件
                    单个:Include("head.html");
                    多个:include("head.html","foot.html")
 

三、常见问题有哪些?

1. VTL引擎加载顺序是什么样的?
答: 是按照顺序至上而下加载,如果你使用的变量比它的初始化位置靠前,那么该变量将不会有值
如:{$temp} #set($temp="哈哈哈")
 

 

四、于JQuery冲突时解决办法

1. 使用 JQuery.noConflict。如:var j=JQuery.noConflict(); j.ajax({});
    缺点:当使用JQuery相关插件时,会导致插件失效。
2. 使用JQuery代替$. 如JQuery.ajax({});
    缺点:不适合扩展,一旦替换成第三方库时,那就麻烦大发
3. 定义一个$JQ为$. 以后可以在JS中可以这样用${JQ}AJAX了
    前台可以这样定义 #set($JQ="$.")
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
   
posted @ 2019-04-30 21:57  NCat  阅读(417)  评论(0)    收藏  举报