usability - 宏的速度命名参数

标签 usability macros velocity

我有一个带有多个参数的宏。其中一些是可选的,如果参数留空,它将替换为默认值。

现在的问题是如何让普通网页设计师尽可能轻松地完成这项工作。除了我的示例之外,还有其他可能性来处理这种情况吗?

示例 1:

这里明显的问题是可选值。

#macro (myTag $param1 $param2 $param3)
...
#end

示例 2:

这里的问题是当多次使用同一个宏并且所有变量都没有重新设置时可能出现的问题。

#set ($param1="value1") 
#set ($param2="value2") 
#set ($param3="value3") 

#macro (myTag)
...
#end

最佳答案

从 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)

显示:

item 1: val1
item 2: val2

要处理可选参数,请在宏中使用#if 来检查参数。向 map 添加新元素有点困惑。由于 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)

显示

item 1: val1
item 2: val2
item 3: default3

关于usability - 宏的速度命名参数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/541670/

相关文章:

macros - set-macro-character 的非终止-p 参数有什么作用?

c++ - 我应该在 Xcode 的什么地方定义 DISALLOW_COPY_AND_ASSIGN 宏

java - Velocity 模板 - 消息键而不是带有占位符的整个短语

java - 如何将速度模板中的数据绑定(bind)到 Spring Controller ?

user-interface - 什么时候真正需要模态对话框?

security - Web表单是否有一个不引人注意的验证码?

c# - TreeView 可用性差

rust - Rust宏: unit type?

java - 速度和忽略java方法返回

css - 哪种屏幕阅读器最适合测试网站的可访问性以及如何配置它?