This Domain(Admin5.com) is for Sale:

Velocity用户手册---中文版

时间:2007-10-22  来源:不详  作者:林子

例如:#center ( #bold( “hello” ) )

不可以。一个directive的参数使用另外一个directive是不合法的。

但是,还是有些事情你可以作的。最简单的方式就是使用双引号:

#set ( $stuff = “#bold( ‘hello’ )” )

#center ( $stuff )

上面的格式也可以缩写为一行:

#center ( “#bold( ‘hello’ ) )

请注意在下面的例子中参数被evaluated在Velocimacro内部,而不是在calling level。例子:

#macro ( inner $foo )

inner : $foo

#end

#macro ( outer $foo )

#set ( $bar = “outerlala” )

outer : $foo

#end

#set ( $bar = ‘calltimelala’ )

#outer( “#inner($bar)” )

输出结果为:

outer : inner : outerlala

记住Veloctiy的特性:参数的传递是By Name的。例如:

#macro ( foo $color )

<tr bgcolor = $color ><td>Hi</td></tr>

<tr bgcolor = $color ><td>There</td></tr>

#end

#foo ( $bar.rowColor() )

以上代码将导致rowColor()方法两次调用,而不是一次。为了避免这种现象的出现,我们可以按照下面的方式执行:

#set ( $color = $bar.rowColor() )

#foo ( $color )

can I register velocimacros via #parse()?

目前,Velocimacros必须在第一次被模板调用前被定义。这就意味着你的#macro()声明应该出现在使用Velocimacros之前。

如果你试图#parse()一个包含#macro() directive的模板,这一点是需要牢记的。因为#parse()发生在运行期,但是解析器在parsetiem决定一个看似VM元素的元素是否是一个VM元素,这样#parse()-ing一组VM声明将不按照预期的样子工作。为了得到预期的结果,只需要你简单的使用velocimacro.library使得Velocity在启动时加载你的VMs。

What is velocimacro autoreloading?

velocimacro.library.autoreload是专门为开发而非产品使用的一个属性。此属性的默认值是false。

String concatenation

开发人员最常问的问题是我如何作字符拼接?在java中是使用“+”号来完成的。

在VTL里要想实现同样的功能你只需要将需要联合的reference放到一起就行了。例如:

#set ( $size = “Big” )

#set ( $name = “Ben” )

The clock is $size$name.

输出结果将是:The clock is BigBen.。更有趣的情况是:

看完这篇,您有何感觉呢?

文章评论

共有位Admini5网友发表了评论 查看完整内容

24小时热门信息