VTemplate模板引擎的使用—Function标签
2011-08-31 17:59
561 查看
了解或者认识VTemplate:
VTemplate也被网友们简称VT,它是一个基于.net里的模板引擎。
/article/4882156.html
现在让我们了解一下VT里最常用的function标签。
Function标签
其定义格式:
.csharpcode,.csharpcodepre
{
font-size:small;
color:black;
font-family:consolas,"CourierNew",courier,monospace;
background-color:#ffffff;
/*white-space:pre;*/
}
.csharpcodepre{margin:0em;}
.csharpcode.rem{color:#008000;}
.csharpcode.kwrd{color:#0000ff;}
.csharpcode.str{color:#006080;}
.csharpcode.op{color:#0000c0;}
.csharpcode.preproc{color:#cc6633;}
.csharpcode.asp{background-color:#ffff00;}
.csharpcode.html{color:#800000;}
.csharpcode.attr{color:#ff0000;}
.csharpcode.alt
{
background-color:#f4f4f4;
width:100%;
margin:0em;
}
.csharpcode.lnum{color:#606060;}
它的作用即是在VT里调用某个方法并将返回值赋给某个变量(定义了var的情况)。
假设我们现有这样的一个类定义
现在我们要调用其定义的方法。
静态方法的调用
在我们的程序代码里,如果要调用上面类的GetDbData静态方法,我们一般这样写(完整写法)
而将上面的语句转成VT的模板标签后,就需要写成这样的function标签
.csharpcode,.csharpcodepre
{
font-size:small;
color:black;
font-family:consolas,"CourierNew",courier,monospace;
background-color:#ffffff;
/*white-space:pre;*/
}
.csharpcodepre{margin:0em;}
.csharpcode.rem{color:#008000;}
.csharpcode.kwrd{color:#0000ff;}
.csharpcode.str{color:#006080;}
.csharpcode.op{color:#0000c0;}
.csharpcode.preproc{color:#cc6633;}
.csharpcode.asp{background-color:#ffff00;}
.csharpcode.html{color:#800000;}
.csharpcode.attr{color:#ff0000;}
.csharpcode.alt
{
background-color:#f4f4f4;
width:100%;
margin:0em;
}
.csharpcode.lnum{color:#606060;}
也就是function标签里的type属性我们需要写Db类的完整定义路径。
实例方法的调用
在我们的程序代码里,如果要调用类实现的方法,我们一般这样写
而将上面代码转成VT的模板标签后,我们的function标签就是这样写
.csharpcode,.csharpcodepre
{
font-size:small;
color:black;
font-family:consolas,"CourierNew",courier,monospace;
background-color:#ffffff;
/*white-space:pre;*/
}
.csharpcodepre{margin:0em;}
.csharpcode.rem{color:#008000;}
.csharpcode.kwrd{color:#0000ff;}
.csharpcode.str{color:#006080;}
.csharpcode.op{color:#0000c0;}
.csharpcode.preproc{color:#cc6633;}
.csharpcode.asp{background-color:#ffff00;}
.csharpcode.html{color:#800000;}
.csharpcode.attr{color:#ff0000;}
.csharpcode.alt
{
background-color:#f4f4f4;
width:100%;
margin:0em;
}
.csharpcode.lnum{color:#606060;}
function标签里的type属性我们写为“$db”,这就表示,我们调用的方法是“db”这个变量的实例方法。
但这个变量是从哪里来呢?这个变量也是同程序代码里一样,也是需要你在VT里对其赋值,比如下面的示例代码:
上面代码里我们调用了SetValue方法,将“db”这个变量赋值到了VT模板里,这样模板里就可以调用此变量的值或方法了。
带参数的方法调用
如上面Db类里的GetDataByName方法,在程序代码里我们一般这样写
而对于带参数的方法,在VT模板里,我们就可以使用function标签里的args属性,如下面
.csharpcode,.csharpcodepre
{
font-size:small;
color:black;
font-family:consolas,"CourierNew",courier,monospace;
background-color:#ffffff;
/*white-space:pre;*/
}
.csharpcodepre{margin:0em;}
.csharpcode.rem{color:#008000;}
.csharpcode.kwrd{color:#0000ff;}
.csharpcode.str{color:#006080;}
.csharpcode.op{color:#0000c0;}
.csharpcode.preproc{color:#cc6633;}
.csharpcode.asp{background-color:#ffff00;}
.csharpcode.html{color:#800000;}
.csharpcode.attr{color:#ff0000;}
.csharpcode.alt
{
background-color:#f4f4f4;
width:100%;
margin:0em;
}
.csharpcode.lnum{color:#606060;}
而如果我们的参数不是一个常量值,而是一个变量值,我们也可以在args属性里调用,如下面
但name变量也是需要赋值才可以使用(如通过SetValue方法),并且类型要一致,如果不一致,VT引擎将会尝试转换类型,如果类型转换成功则执行方法,如果失败将不会执行方法!!(参数类型不匹配时,因为会尝试转换,所以这里的效率会非常低,请尽量避免)
如果我们的方法里有多个参数,我们可以通过定义多个args属性,但要注意它们的定义顺序是同方法的参数定义顺序一样的。如下面的示例
VT里的function标签我们就可以写成这样
参数的[b]自定义[/b]
上面的例子里,如果我们的方法参数非常多,用args定义是可以做到,但是却非常的不直观,并且如果参数定义的顺序或类型一错,将会导致我们的方法无法正确执行!如果能换一种方式,比如下面这样的定义
这样我们的模板代码看起来就非常的直观明了。
VT模板里允许在标签里添加自定义属性,所以我们上面的标签定义是符合格式的,但是我们为了能使自定义属性当作参数使用,我们就需要改写GetDataBy方法,如下
GetDataBy方法变成了无参数方法,并在方法里我们调用了“TemplateDocument.CurrentRenderingDocument”获取当前正在呈现解析数据的模板文档对象,再通过“document.CurrentRenderingTag”获取当前呈现解析数据的模板标签对象。如果我们的GetDataBy方法是通过上面的function标签调用执行的,则“document.CurrentRenderingTag”获取到的标签对象就是此function标签,所以我们可以获取此标签里的所有自定义属性值,从而得到pName与pCategory里定义的值。
注:各个模板标签都有自己的关键属性,这些是无法在自定义属性里获取的,比如"id“、“name“这些是不能用做自定义属性的。
用户自定义方法
如果我们有些方法是私有的,比如
或者匿名方法
对于这两种情况,我们是无法直接通过function标签调用的,因为我们无法写type属性!因为type属性需要类名或者是类实例变量,并且是只能调用公开方法
而对于这两种情况,则我们需要先在模板里注册用户自定义函数,才能通过function标签调用。如下示例
注册了自定义函数后,我们就可以写无type属性的function标签,如下
.csharpcode,.csharpcodepre
{
font-size:small;
color:black;
font-family:consolas,"CourierNew",courier,monospace;
background-color:#ffffff;
/*white-space:pre;*/
}
.csharpcodepre{margin:0em;}
.csharpcode.rem{color:#008000;}
.csharpcode.kwrd{color:#0000ff;}
.csharpcode.str{color:#006080;}
.csharpcode.op{color:#0000c0;}
.csharpcode.preproc{color:#cc6633;}
.csharpcode.asp{background-color:#ffff00;}
.csharpcode.html{color:#800000;}
.csharpcode.attr{color:#ff0000;}
.csharpcode.alt
{
background-color:#f4f4f4;
width:100%;
margin:0em;
}
.csharpcode.lnum{color:#606060;}
VT在处理这种没有type属性的方法时,将会在“自定义函数”列表里查找同名的方法,如果找到则执行方法,否则不处理。
小提示
对于无参数的实例方法,可以直接在变量表达式里执行,所以在任意标签里可直接使用,不一定需要通过function标签执行,如下面示例
.csharpcode,.csharpcodepre
{
font-size:small;
color:black;
font-family:consolas,"CourierNew",courier,monospace;
background-color:#ffffff;
/*white-space:pre;*/
}
.csharpcodepre{margin:0em;}
.csharpcode.rem{color:#008000;}
.csharpcode.kwrd{color:#0000ff;}
.csharpcode.str{color:#006080;}
.csharpcode.op{color:#0000c0;}
.csharpcode.preproc{color:#cc6633;}
.csharpcode.asp{background-color:#ffff00;}
.csharpcode.html{color:#800000;}
.csharpcode.attr{color:#ff0000;}
.csharpcode.alt
{
background-color:#f4f4f4;
width:100%;
margin:0em;
}
.csharpcode.lnum{color:#606060;}
VTemplate也被网友们简称VT,它是一个基于.net里的模板引擎。
现在让我们了解一下VT里最常用的function标签。
Function标签
其定义格式:
<vt:functionvar="变量"method="方法名"type="类型或实例变量"args="参数"output="true/false"/>
.csharpcode,.csharpcodepre
{
font-size:small;
color:black;
font-family:consolas,"CourierNew",courier,monospace;
background-color:#ffffff;
/*white-space:pre;*/
}
.csharpcodepre{margin:0em;}
.csharpcode.rem{color:#008000;}
.csharpcode.kwrd{color:#0000ff;}
.csharpcode.str{color:#006080;}
.csharpcode.op{color:#0000c0;}
.csharpcode.preproc{color:#cc6633;}
.csharpcode.asp{background-color:#ffff00;}
.csharpcode.html{color:#800000;}
.csharpcode.attr{color:#ff0000;}
.csharpcode.alt
{
background-color:#f4f4f4;
width:100%;
margin:0em;
}
.csharpcode.lnum{color:#606060;}
它的作用即是在VT里调用某个方法并将返回值赋给某个变量(定义了var的情况)。
假设我们现有这样的一个类定义
namespaceTest { publicclassDb { publicDataTableGetData() { //这里是详细的代码 } publicDataTableGetDataByName(stringname) { //这里详细的代码 } publicstaticDataTableGetDbData() { //这里是详细的代码 } } }
现在我们要调用其定义的方法。
静态方法的调用
在我们的程序代码里,如果要调用上面类的GetDbData静态方法,我们一般这样写(完整写法)
vardata=Test.Db.GetDbData();
而将上面的语句转成VT的模板标签后,就需要写成这样的function标签
<vt:functionvar="data"method="GetDbData"type="Test.Db"/>
.csharpcode,.csharpcodepre
{
font-size:small;
color:black;
font-family:consolas,"CourierNew",courier,monospace;
background-color:#ffffff;
/*white-space:pre;*/
}
.csharpcodepre{margin:0em;}
.csharpcode.rem{color:#008000;}
.csharpcode.kwrd{color:#0000ff;}
.csharpcode.str{color:#006080;}
.csharpcode.op{color:#0000c0;}
.csharpcode.preproc{color:#cc6633;}
.csharpcode.asp{background-color:#ffff00;}
.csharpcode.html{color:#800000;}
.csharpcode.attr{color:#ff0000;}
.csharpcode.alt
{
background-color:#f4f4f4;
width:100%;
margin:0em;
}
.csharpcode.lnum{color:#606060;}
也就是function标签里的type属性我们需要写Db类的完整定义路径。
实例方法的调用
在我们的程序代码里,如果要调用类实现的方法,我们一般这样写
vardb=newDb(); vardata=db.GetData();
而将上面代码转成VT的模板标签后,我们的function标签就是这样写
<vt:functionvar="data"method="GetData"type="$db"/>
.csharpcode,.csharpcodepre
{
font-size:small;
color:black;
font-family:consolas,"CourierNew",courier,monospace;
background-color:#ffffff;
/*white-space:pre;*/
}
.csharpcodepre{margin:0em;}
.csharpcode.rem{color:#008000;}
.csharpcode.kwrd{color:#0000ff;}
.csharpcode.str{color:#006080;}
.csharpcode.op{color:#0000c0;}
.csharpcode.preproc{color:#cc6633;}
.csharpcode.asp{background-color:#ffff00;}
.csharpcode.html{color:#800000;}
.csharpcode.attr{color:#ff0000;}
.csharpcode.alt
{
background-color:#f4f4f4;
width:100%;
margin:0em;
}
.csharpcode.lnum{color:#606060;}
function标签里的type属性我们写为“$db”,这就表示,我们调用的方法是“db”这个变量的实例方法。
但这个变量是从哪里来呢?这个变量也是同程序代码里一样,也是需要你在VT里对其赋值,比如下面的示例代码:
TemplateDocumentdocument=TemplateDocument.FromFileCache(@"c:\template\test.html",Encoding.UTF8);
document.SetValue("db",newDb());
上面代码里我们调用了SetValue方法,将“db”这个变量赋值到了VT模板里,这样模板里就可以调用此变量的值或方法了。
带参数的方法调用
如上面Db类里的GetDataByName方法,在程序代码里我们一般这样写
vardb=newDb();
vardata=db.GetDataByName("car");
而对于带参数的方法,在VT模板里,我们就可以使用function标签里的args属性,如下面
<vt:functionvar="data"method="GetDataByName"type="$db"args="car"/>
.csharpcode,.csharpcodepre
{
font-size:small;
color:black;
font-family:consolas,"CourierNew",courier,monospace;
background-color:#ffffff;
/*white-space:pre;*/
}
.csharpcodepre{margin:0em;}
.csharpcode.rem{color:#008000;}
.csharpcode.kwrd{color:#0000ff;}
.csharpcode.str{color:#006080;}
.csharpcode.op{color:#0000c0;}
.csharpcode.preproc{color:#cc6633;}
.csharpcode.asp{background-color:#ffff00;}
.csharpcode.html{color:#800000;}
.csharpcode.attr{color:#ff0000;}
.csharpcode.alt
{
background-color:#f4f4f4;
width:100%;
margin:0em;
}
.csharpcode.lnum{color:#606060;}
而如果我们的参数不是一个常量值,而是一个变量值,我们也可以在args属性里调用,如下面
<vt:functionvar="data"method="GetDataByName"type="$db"args="$name"/>
但name变量也是需要赋值才可以使用(如通过SetValue方法),并且类型要一致,如果不一致,VT引擎将会尝试转换类型,如果类型转换成功则执行方法,如果失败将不会执行方法!!(参数类型不匹配时,因为会尝试转换,所以这里的效率会非常低,请尽量避免)
如果我们的方法里有多个参数,我们可以通过定义多个args属性,但要注意它们的定义顺序是同方法的参数定义顺序一样的。如下面的示例
publicDataTableGetDataBy(stringname,intcategory)
{
//这里详细的代码
}
VT里的function标签我们就可以写成这样
<vt:functionvar="data"method="GetDataBy"type="$db"args="car"args="1"/>
参数的[b]自定义[/b]
上面的例子里,如果我们的方法参数非常多,用args定义是可以做到,但是却非常的不直观,并且如果参数定义的顺序或类型一错,将会导致我们的方法无法正确执行!如果能换一种方式,比如下面这样的定义
<vt:functionvar="data"method="GetDataBy"type="$db"pName="car"pCategory="1"/>
这样我们的模板代码看起来就非常的直观明了。
VT模板里允许在标签里添加自定义属性,所以我们上面的标签定义是符合格式的,但是我们为了能使自定义属性当作参数使用,我们就需要改写GetDataBy方法,如下
publicDataTableGetDataBy()
{
vardocument=TemplateDocument.CurrentRenderingDocument;
vartag=document==null?null:document.CurrentRenderingTag;
if(tag==null)returnnull;
varname=tag.Attributes.GetValue("pName");
varcategory=tag.Attributes.GetValue("pCategory").As<int>(0);
//这里是详细的代码
}
GetDataBy方法变成了无参数方法,并在方法里我们调用了“TemplateDocument.CurrentRenderingDocument”获取当前正在呈现解析数据的模板文档对象,再通过“document.CurrentRenderingTag”获取当前呈现解析数据的模板标签对象。如果我们的GetDataBy方法是通过上面的function标签调用执行的,则“document.CurrentRenderingTag”获取到的标签对象就是此function标签,所以我们可以获取此标签里的所有自定义属性值,从而得到pName与pCategory里定义的值。
注:各个模板标签都有自己的关键属性,这些是无法在自定义属性里获取的,比如"id“、“name“这些是不能用做自定义属性的。
用户自定义方法
如果我们有些方法是私有的,比如
privateDataTableGetUserData(object[]o)
{
}
或者匿名方法
UserDefinedFunctionGetUserData=(o)=>
{
//这里是详细的处理代码
};
对于这两种情况,我们是无法直接通过function标签调用的,因为我们无法写type属性!因为type属性需要类名或者是类实例变量,并且是只能调用公开方法
而对于这两种情况,则我们需要先在模板里注册用户自定义函数,才能通过function标签调用。如下示例
TemplateDocumentdocument=TemplateDocument.FromFileCache(@"c:\template\test.html",Encoding.UTF8);
document.RegisterGlobalFunction("GetUserData",GetUserData);
注册了自定义函数后,我们就可以写无type属性的function标签,如下
<vt:functionvar="data"method="GetUserData"/>
.csharpcode,.csharpcodepre
{
font-size:small;
color:black;
font-family:consolas,"CourierNew",courier,monospace;
background-color:#ffffff;
/*white-space:pre;*/
}
.csharpcodepre{margin:0em;}
.csharpcode.rem{color:#008000;}
.csharpcode.kwrd{color:#0000ff;}
.csharpcode.str{color:#006080;}
.csharpcode.op{color:#0000c0;}
.csharpcode.preproc{color:#cc6633;}
.csharpcode.asp{background-color:#ffff00;}
.csharpcode.html{color:#800000;}
.csharpcode.attr{color:#ff0000;}
.csharpcode.alt
{
background-color:#f4f4f4;
width:100%;
margin:0em;
}
.csharpcode.lnum{color:#606060;}
VT在处理这种没有type属性的方法时,将会在“自定义函数”列表里查找同名的方法,如果找到则执行方法,否则不处理。
小提示
对于无参数的实例方法,可以直接在变量表达式里执行,所以在任意标签里可直接使用,不一定需要通过function标签执行,如下面示例
<vt:setvar="data"value="$db.GetData()"/>
<vt:foreachfrom="$db.GetData()"item="data">.......</vt:foreach>
.csharpcode,.csharpcodepre
{
font-size:small;
color:black;
font-family:consolas,"CourierNew",courier,monospace;
background-color:#ffffff;
/*white-space:pre;*/
}
.csharpcodepre{margin:0em;}
.csharpcode.rem{color:#008000;}
.csharpcode.kwrd{color:#0000ff;}
.csharpcode.str{color:#006080;}
.csharpcode.op{color:#0000c0;}
.csharpcode.preproc{color:#cc6633;}
.csharpcode.asp{background-color:#ffff00;}
.csharpcode.html{color:#800000;}
.csharpcode.attr{color:#ff0000;}
.csharpcode.alt
{
background-color:#f4f4f4;
width:100%;
margin:0em;
}
.csharpcode.lnum{color:#606060;}
相关文章推荐
- VTemplate模板引擎的使用—Function标签
- layui模板引擎和Tab标签一起使用
- C++ - 模板类使用成员函数模板(member function template)处理隐式(implicit)转换
- VTemplate模板引擎的使用--进阶篇
- 模板类使用成员函数模板(member function template)处理隐式(implicit)转换
- JS模板引擎---腾讯artTemplate的使用
- 高性能art-template模板引擎的使用
- template-web.js模板引擎的使用之高级篇
- JSONP与artTemplate模板引擎使用的示例--请求天气数据
- ASP.NET MVC 使用AderTemplate模板引擎进行视图显示
- VTemplate模板引擎的使用 - MasterPage篇
- c#使用 VTemplate模板引擎制作html报表
- VTemplate模板引擎的使用--入门篇
- artTemplate模板引擎简单介绍使用
- 模板引擎ArtTemplate使用方法
- 前端模板引擎 artTemplate的 使用与进阶
- 玄宇说:简单的VTemplate模板引擎的使用
- artTemplate模板引擎简单介绍使用
- js高效模板引擎artTemplate 的使用总结
- JSONP与artTemplate模板引擎使用的示例--请求天气数据