Pet*_*rta 3 macros usability velocity
我有一个宏取几个参数.其中一些是可选的,如果参数保持为空,它将替换为默认值.
现在的问题是如何让普通网页设计师尽可能简单.除了我的例子之外还有其他可能性来处理这个案子吗?
例1:
这里显而易见的问题是可选值.
#macro (myTag $param1 $param2 $param3)
...
#end
Run Code Online (Sandbox Code Playgroud)
例2:
这里问题是一个可能的问题,当多次使用相同的宏并且不再设置所有变量时.
#set ($param1="value1")
#set ($param2="value2")
#set ($param3="value3")
#macro (myTag)
...
#end
Run Code Online (Sandbox Code Playgroud)
从Velocity 1.6开始,不支持可选参数或命名参数.最近提交了一个使用此功能的补丁,因此我们可能会在将来的版本中看到它.
在此期间,请考虑传入列表或值映射.例如,您可以按如下方式传递参数图(需要Velocity 1.5或更高版本):
#macro(myMacro $p)
item 1: $p.param1
item 2: $p.param2
#end
#set($params = {"param1" : "val1", "param2":"val2"})
#myMacro($params)
Run Code Online (Sandbox Code Playgroud)
显示:
item 1: val1
item 2: val2
Run Code Online (Sandbox Code Playgroud)
要处理可选参数,请在宏中使用#if来检查参数.向地图添加新元素有点乱.由于Java方法"put"返回一个值,因此必须使用#set来处理返回值.(否则它会显示在生成的文本中).
#macro(myMacro $p)
#if(!$p.param1)#set($dummy = $p.put("param1", "default1"))#end
#if(!$p.param2)#set($dummy = $p.put("param2", "default2"))#end
#if(!$p.param3)#set($dummy = $p.put("param3", "default3"))#end
item 1: $p.param1
item 2: $p.param2
item 3: $p.param3
#end
#set($params = {"param1" : "val1", "param2":"val2"})
#myMacro($params)
Run Code Online (Sandbox Code Playgroud)
显示器
item 1: val1
item 2: val2
item 3: default3
Run Code Online (Sandbox Code Playgroud)