之前我转载过一篇:
《Velocity 模板使用指南》中文版[转] ,这个是基于最开始的Java版下的Velocity来说的。后来在castle的.NET版下又提供了一些增强功能,详见:
NVelocity Improvements本文结合一些小例子来具体谈谈这些增强功能的使用。
(
有部分内容是直接翻译自NVelocity Improvements-_-)
一、支持数组参数比如在Controller中定义如下方法:
publicvoidIndex()
{
PropertyBag.Add("instance",this);
}
publicstaticstringWelcome(paramsString[]args)
{
returnString.Join("-",args);
}
在vm中写:
$instance.Welcome('arg1','arg2')
那么回输出如下结果:
arg1-arg2
二、内置字典支持对于一些传参的地方很方便,比如我们常用的一种方式:
$HtmlHelper.LabelFor('elementid','Name:',"%{class='required',accessKey='N'}")
那么会自动生成一个字典,里面包含class和accessKey两个条目
内置字典我们可以在很多场合用到,比如我们在Controller中定义一个方法:
publicstringDictionaryTest(stringname,IDictionaryattributes)
{
StringBuildersResult=newStringBuilder("<inputtype=\"text\"name='"+name+"'");
foreach(objectkeyinattributes.Keys)
{
objectvalue=attributes[key];
sResult.Append(""+key+"='"+value+"'");
}
sResult.Append("/>");
returnsResult.ToString();
}
然后在vm中调用:
$instance.DictionaryTest('id',"%{aa='aa1',value='aa2',value2='aa3'}")
会在页面中生成一个输入框,具体的html代码是:
<inputtype="text"name='id'aa='aa1'value='aa2'value2='aa3'/>
三、更强的foreach功能(这个功能比较好)可以指定在foreach之前、之后等特定时候执行一些语句,具体语法如下:
#foreach($iin$items)
#each(thisisoptionalsinceitsthedefaultsection)
textwhichappearsforeachitem
#before
textwhichappearsbeforeeachitem
#after
textwhichappearsaftereachitem
#between
textwhichappearsbetweeneachtwoitems
#odd
textwhichappearsforeveryotheritem,includingthefirst
#even
textwhichappearsforeveryotheritem,startingwiththesecond
#nodata
Contentrenderedif$itemsevaluatedtonullorempty
#beforeall
textwhichappearsbeforetheloop,onlyifthereareitems
matchingcondition
#afterall
textwhichappearsaftertheloop,onlyofthereareitems
matchingcondition
#end
比如如下的一个例子:
#foreach($personin$people)
#beforeall
<table>
<tr>
<th>Name</th>
<th>Age</th>
</tr>
#before
<tr
#odd
Style='color:gray'>
#even
Style='color:white'>
#each
<td>$person.Name</td>
<td>$person.Age</td>
#after
</tr>
#between
<tr><tdcolspan='2'>$person.bio</td></tr>
#afterall
</table>
#nodata
SorryNoPersonFound
#end
当我们$people中有两条记录时会生成以下html:
<table>
<tr>
<th>Name</th>
<th>Age</th>
</tr>
<trstyle='color:white'>
<td>John</td>
<td>32</td>
</tr>
<tr><tdcolspan='2'>Monorailprogrammer</td></tr>
<trstyle='color:gray'>
<td>Jin</td>
<td>12</td>
</tr>
<tr><tdcolspan='2'>Castleguru</td></tr>
</table>
当$people为null时会直接输出:
SorryNoPersonFound
四、枚举类型的改进为了可读性,可以自己使用枚举类型的文字表达进行比较。
例:
publicenumOrderStatus
{
Undefined,
Created,
Dispatched
}
那么可以在vm中如下比较:
#if($order=="Undefined")
Sorry,butwedon'tknowthisorder.
#elseif($order=="Created")
Yourorderisbeingprocessed.Holdon!
#elseif($order=="Dispatched")
YourorderhasbeendispatchedthroughUPS.Crossyourfingers!
#end
(
原文中好像有点问题,我重新改了一些代码)
Castle1.0 RC3中的新功能:
1、在vm中,方法和属性不再区分大小写,使用时可以不必记住大小写了
2、字典功能改进,在vm字典调用时可以直接使用以下方式(参见上面的
内置字典支持):
key='value' key=1 key=1.2 key='1' $key='value' key=$value key='some$value'
分享到:
相关推荐
:monorail: 单轨| 网络设计系统Monorail for React帮助开发人员执行。 这些组件由SimSpace的工程师和UX设计师的核心团队开发,可实现可靠的开发工作流程,以构建美观且功能强大的Web项目。快速开始将Monorail添加到...
MonoRail学习笔记一:一个小例子 随着微软放出消息,准备发布MVC的框架,各种议论纷至沓来。 以前用java、jsp对它的MVC结构、集中控制印象特别深刻,自从用了.NET后,虽然webform的控件很好用,总感觉有点怪怪的 ...
MonoRail基础学习文档和实例 欢迎大学学习交流
MonoRail示例建立一个简单的mvc结构
Monorail PaginationHelper.CreateCustomPage 自定义分页 应用 Monorail分页
学习资料monorail
研究MonoRail的几个功能 上传图片功能 和 整合FCK的功能
谢谢你的 RAILS v1.5.1 和 Cobbler v0.6.1 雷内 L.沃伦,2014-2021 电子邮件:bcgsc.ca 的 rwarren 名称 RAILS: Radial Assembly Improvement by Long Sequence Scaffolding Cobbler: Gap-filling with long ...
monorail是一个第三方的.net mvc技术框架。在使用的时候非常的方便,功能也非常的强大。该例子只是一个简单的使用介绍。
ShoppingCart-MonoRail.rar,这是monorail的一个经典实例
Kirby + Vue.js入门套件主要特征 :motorway: 自动路由 :magnifying_glass_tilted_left: SEO友好:元标记 :globe_with_meridians: :wheelchair_symbol: 无障碍前端路由 :monorail: :dizzy: 页面数据 :high_voltage: ...
Monorail .Net的sample
这是一个monorail的过滤器实例,和java中的差不多
MonoRail 实体类生成器简单的操作为程序员节省时间。
monorail一个简单的例子 可以学习入门的
C#开发 ibatisnet+monorail+vs2010的项目实例
C#开发 MonoRail+IBatisNet +Velocity+vs2010的项目实例,初学者配置起来比较繁琐,配置好使用起来发现IBatisNet 还是很强大的!
SharpDevelop下的castle monorail工程模板,请拷贝到安装目录下 data\templates\project\CSharp 中。重启SharpDvelop即可选择MonoRail类型工程。
Castle项目下的子项目 MonoRail,相关文档, 都是英文的,但写的很简单,英文不怎么好的也能看懂