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="$.")
真正的大师永远怀着一颗学徒的心。

浙公网安备 33010602011771号