VTemplate模板引擎的使用--认识篇

在上篇《VTemplate模板引擎的使用--入门篇》中我们介绍了VT模板的设计和使用,当我们根据VT模板实例化TemplateDocument对象时,TemplateDocument对象将会在内存中把VT模板数据解析为各种模板元素对象,并以树状形式表现各对象之间的关系,以便我们能够以编程方式访问、处理VT模板。

 

1、VTemplate模板引擎的元素对象:

让我们看一下VTemplate模板引擎中的所有元素对象关系图:

vtemplate_cd

从关系图可看出,VTemplate模板引擎的元素对象主要由三种基对象构成:TextNodeVariableTag、Tag

 

1.1、TextNode元素对象:

TextNode即是文本节点,也即是对模板引擎来说无任何意义的文本字符。

上一篇中的这段VT模板:

<div class=”bloglog”><strong>{$:blogarchive.title htmlencode=”true”}</strong>

当被模板引擎解析后,前后暗红色区域的段字符将被解析为两个不同的TextNode对象。

1.2、VariableTag元素对象:

VariableTag变量元素对象,主要用于输出变量表达式的值。如上例中的VT模板,被解析后将红色段字符将被解析为一个VariableTag对象。

1.3、Tag元素对象:

Tag标签元素对象,此类对象可供我们的程序获取调用,所以一般用于做程序逻辑控制。其根据不同的用途衍生出不同的标签元素对象,如条件判断的IfTag、数据循环的ForEachTagForTag对象等等。

方法:

名称说明
GetChildTagById(string id)根据标签id获取某个子Tag对象
GetChildTagsByName(string name)获取所有同名称的子Tag对象
GetChildTagsByTagName(string tagName)获取所有同标签名(如<vt:for>中的for则叫标签名)的子Tag对象
Render(TextWriter writer)将本标签元素对象的最终呈现数据文本解析到TextWriter对象
RenderTo(string filename)
RenderTo(string filename, Encoding charset)
将本标签元素对象的最终呈现数据文本解析到某个文件保存


部分属性/集合

名称说明
Attributes返回标签对象中定义的属性集合
InnerElements返回标签对象中的子元素对象集合

 

事件:

名称说明
BeforeRender在准备呈现本标签元素对象的解析数据文本前触发的事件
AfterRender在已呈现本标签元素对象的解析数据文本后触发的事件

 

1.3.1 TemplateDocument对象:

TemplateDocument对象是VTemplate模板引擎的入口。当根据VT模板实例化TemplateDocument对象后,在程序里我们就可以通过TemplateDocument对象提供的方法或属性/集合来访问VT模板在内存中表现的各个模板元素对象。

方法:

名称说明
GetChildTemplateById(string id)根据标签id获取某个子Template对象
GetChildTemplatesByName(string name)获取所有同名称的子Template对象
GetRenderText()获取解析后最终呈现的数据文本
SetValue(string varName,obj varValue)设置所有同名变量的值
FromFileCache(string fileName, Encoding charset)从文件中构建缓存模板文档对象

 

部分属性/集合:

名称说明
DocumentElement返回文档(根)模板对象
Variables返回当前模板块下的变量集合
ChildTemplates返回当前模板块下的子Template对象集合

 

2、Variable :变量

变量是VTemplate模板引擎中的核心,用于存储或控制数据的输出,其类似于程序语言中的“变量”概念,定义格式也是一样。其在VT模板中是寄生于VariableTag元素对象或者Tag元素对象中的属性值中。

VariableTag元素对象中定义:

<div class=”bloglog”><strong>{$:blogarchive.title htmlencode=”true”}</strong>

或在Tag元素对象属性中定义:

<vt:foreach from=”blogarchive.comments” item=”comment” index=”floor”>………</vt:foreach>

当上面的VT模板被解析后,蓝色的字符将会解析为Variable。在程序代码中就可以通过TemplateDocumentTemplate标签元素对象的Variables集合访问变量。

 

方法:

名称说明
SetExpValue(string exp, object value)设置变量中某种表达式所表示的值
Reset()重设(清空)当前变量中已缓存的表达式值


部分属性:

名称说明
Value设置或返回当前变量的值

 

3、Attribute : 属性

Tag元素对象中定义的某个属性,当定义后可通过对应Tag元素对象的Attributes集合访问。

<vt:foreach from=”blogarchive.comments” item=”comment” index=”floor”>………</vt:foreach>

如上面VT模板被解析后foreach元素对象将含有3个属性。

注:Tag元素对象的属性不限制个数,但在某些Tag元素对象中某些属性是已被VT模板引擎定义使用的!

 

4、LoopIndex :循环索引

循环索引只在<vt:foreach>和<vt:for> Tag元素对象中index属性值中使用,或者换句话说,<vt:foreach>和<vt:for>标签中index属性定义的变量的值存储的是一个循环索引对象。


部分属性:

名称说明
Value返回当前索引值
IsFirst返回当前索引值是不是第一个
IsLast返回当前索引值是不是最后一个
IsEven返回当前索引值是不是偶数值

 

上篇中我们实现了一个博客评论列表,那段VT模板如下:

<strong>评论列表</strong>
<vt:foreach from=”$blogarchive.comments” item=”#.comment” index=”#.floor”>
<hr class=”blogsplit”/>
<div class=”blogcomment”>#{$:#.floor}楼 {$:#.comment.time format=”yyyy-MM-dd HH:mm”} | {$:#.comment.author htmlencode=”true”} </div> <div style="padding-left: 20px">{$:#.comment.content htmlencode=”true”}</div>
</vt:foreach>

如果现在我们想实现当楼层为偶数时换一种风格显示(比如加背景色),那么我们就可以根据floor变量的值来进行修改VT模板了,如下:

<strong>评论列表</strong>
<vt:foreach from=”$blogarchive.comments” item=”#.comment” index=”#.floor”>
<hr class=”blogsplit”/>
<vt:if var=”#.floor.iseven” value=”true”>
<div class=”blogcomment evenfloor”>#{$:#.floor}楼 {$:#.comment.time format=”yyyy-MM-dd HH:mm”} | {$:#.comment.author htmlencode=”true”} </div> <div style="padding-left: 20px">{$:#.comment.content htmlencode=”true”}</div>
<vt:else />
<div class=”blogcomment”>#{$:#.floor}楼 {$:#.comment.time format=”yyyy-MM-dd HH:mm”} | {$:#.comment.author htmlencode=”true”} </div> <div style="padding-left: 20px">{$:#.comment.content htmlencode=”true”}</div>
</vt:if>
</vt:foreach>

用上面的VT模板代码更新上篇例子中的VT模板,程序不用变(模板的好处就在这里),直接运行例子程序后我们就能直接看到在2楼的评论加多了一个背景,如图:

vtemplate_blogcomment_bg

 

VTemplate项目托管在Google code上
URL: http://net-vtemplate.googlecode.com/
SVN: http://net-vtemplate.googlecode.com/svn/src/VTemplate.Engine/

更多例子请参考VTemplate.WebTester项目

http://net-vtemplate.googlecode.com/svn/src/VTemplate.WebTester/

或观看在线演示例子:(感谢网友“DOLT”、疯子提供

http://61.155.39.222:8888/index.ashx

注:已建立VTemplate模板引擎技术交流QQ群,欢迎各位加入参与项目开发或技术探讨。QQ群:884468

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
在项目开发中一般分为程序开发者与美工两种身份。可是通常这些使用者不是程序强就是美工强,如果要两者同时兼顾,那可得死掉不少脑细胞。所以模版引擎就应运而生啦!模版引擎的目的,就是要达到上述提到的逻辑分离的功能。它能让程序开发者专注于资料的控制或是功能的达成;而美工则可专注于网页排版,让网页看起来更具有专业感!因此模版引擎很适合公司的网站开发团队使用,使每个人都能发挥其专长! 在ASP.NET开发中,一般情况下,网站的前台程序不使用.NET控件模式,性能都得到了提升。.NET控件的开发方式比较有利于提高开发效率,提高模块的重用性,但缺陷是性能上会有一些损失,例如不用数据绑定,显然也就不必判断数据来源和转换数据类型,不用页面控件和控件事件等,也就避免了使用ViewState,此外.NET控件往往追求功能齐全,当你只需要一部分功能时,大量无用的代码同样会拖累性能,基于以上考虑,方配网站模板引擎选择了另外一种模板方式。 方配网站模板引擎(FangPage Template)也简称为FPT,是一个基于ASP.NET的模板引擎Template Engine)技术,是为了敏捷WEB应用开发和简化企业应用开发而诞生的。它允许任何人仅仅使用简单类似HTML语法的模板语言(Template Language)来定义或引用由.NET代码里定义的对象。当FPT应用于Web开发时,界面设计人员可以和程序开发人员同步开发一个遵循MVC架构的Web站点,也就是说,页面设计人员可以只关注页面的显示效果,而由程序开发人员关注业务逻辑编码。FPT将.NET程序代码从Web页面中分离出来,这样为Web站点的长期维护提供了便利,同时也为我们在传统.NET控件模式设计之外又提供了一种可选的方案。 与传统的WebForm和MVC开发相比,FPT保持了图形设计同应用程序逻辑的分离的同时,还提供了一种更易于管理的方法,使得用户只需了解基本HTML代码就可以制作ASP.Net动态网站,站长可以轻松掌握如何修改和设计界面。更重要的是,它还包含一个高端、高度集成、一致的开发框架,让用户更容易理解及开发。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值