快捷搜索:

VTemplate模版引擎的使用--进阶篇

1、与标签的不合

和 标签都包孕file属性,假如这两个标签都设置file属性,那这两个标签看起来很相似,并且终极效果都是将文件的内容包孕进来。然则对付模版引擎来说它们之间的区别却是异常的大年夜。

标签是“模版块”标签,它能拥有自己的“变量”,它会成为它内部的标签的“宿主模版”(OwnerTemplate)。而则只是简单的将文件内容包孕进来,它内部的标签的“宿主模版”与它相同。

现要是有一个VT模版文件: inc_content.html

我是包孕文件里的变量 {$:#.var1}。

我是包孕文件里的foreach标签:

包孕文件的第{$:#.i}个名字叫{$:#.name}。

现分手用 和 标签去包孕上面的文件,如下:

A、包孕:

我是外部的变量{$:#.var1}。

我是外部的foreach标签:

外部的第{$:#.i}个名字叫{$:#.name}。

B、包孕:

我是外部的变量{$:#.var1}。

我是外部的foreach标签:

外部的第{$:#.i}个名字叫{$:#.name}。

上面两块的VT模版代码看起来很相似,然则经解析后A中的var1与inc这个模版块下的变量var1分手自力存在,互不影响!而B中的变量var1与inc这个的变量var1相等,都是引用同一个变量(其它变量类似)。

现要是A、B两块的VT模版代码都经由过程过下面的法度榜样来处置惩罚:

this.Document.Variables.SetValue("var1", 1);

this.Document.Variables.SetValue("names", new string[] { "张三", "李四", "王五" });

也等于只对外部变量var1、names赋值,终极经模版引擎解析输出后,它们的输出结果如下:

从图可知,包孕的没稀有据输出,而用包孕则稀有据输出并且和外部数据如出一辙!以是可把标签当作是法度榜样说话里的类,它能拥有它自己的变量,改变外部变量的值不会影响到其内部的同名变量,并且外部标签可经由过程其id获取其内部变量!

详细的示例代码,请参考:http://net-vtemplate.googlecode.com/svn/src/VTemplate.WebTester/template_include_test.ashx.cs

2、应用变量表达式

变量表达式可用在标签属性,也可用在变量元素中。它的感化便是用于获取变量中某个字段、属性、函数措施或索引的结果值。比如上例中的#.var1便是阐明获取var1变量的值,也等于数值“1”。

对付变量值类型中真实存在的字段、属性或函数措施,VT模版引擎将经由过程反射获取其结果值,例如以下VT模版代码:

3、有前提的节制数据的输出

在输出数据时,我们并不是简单的输出所稀有据,而是要根据外部的许多前提组合获取此中的部分数据。而对付这些外部前提,假如可固定的则我们可以在设计VT模版时将其写入到标签(建议是标签)的属性里,这样我们就能在法度榜样代码里获取到这些外部前提并加以处置惩罚数据。

例如博客园的新闻频道里右边的“相关新闻”、“热点新闻”两栏数据,如下图:

假设“相关新闻”里获取的新闻是属于"relating”类型的新闻,而“热点新闻”则是获取属于"hoting”类型的新闻,则我们可以设计其VT模版如下:

相关新闻

热点新闻

在上面的VT模版中,定义了两个name为"topnews”的标签,这是为了便于在代码里对这两个进行统一处置惩罚(由于它们要处置惩罚的数据都是相同,只是获取数据前提不合)而定义的名称。并且分手定义了自定义属性type用于做数据获取前提。此中包孕文件cnblogs_newsdata.html的VT模版如下:

您可能还会对下面的文章感兴趣: