宏的 Velocity 命名参数
我有一个带有几个参数的宏。 其中一些是可选的,如果参数留空,它将替换为默认值。
现在的问题是如何让普通网页设计师尽可能轻松地做到这一点。 除了我的例子之外,还有其他可能性来处理这种情况吗?
示例 1:
这里明显的问题是可选值。
#macro (myTag $param1 $param2 $param3)
...
#end
示例 2:
这里的问题是当同一宏多次使用并且所有变量都没有再次设置时可能出现的问题。
#set ($param1="value1")
#set ($param2="value2")
#set ($param3="value3")
#macro (myTag)
...
#end
I have a macro taking several parameters. Some of these are optional and if a parameter is left empty it will replaced with default.
Now the question is how to make this as easy as possible for ordinary web designer. Is there any other possibity apart from my examples to handle this case?
Example 1:
The obvious problem here is the optional values.
#macro (myTag $param1 $param2 $param3)
...
#end
Example 2:
And here the problem is a possible issue when same macro is used more than once and all variables are not set again.
#set ($param1="value1")
#set ($param2="value2")
#set ($param3="value3")
#macro (myTag)
...
#end
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(2)
从 Velocity 1.6 开始,不支持可选或命名参数。 最近提交了一个带有此功能的补丁,因此我们可能会在未来的版本中看到它。
同时,考虑传递一个列表或值映射。 例如,您可以按如下方式传入参数映射(需要 Velocity 1.5 或更高版本):
显示:
要处理可选参数,请在宏中使用 #if 来检查参数。 向地图添加新元素有点混乱。 由于Java方法“put”返回一个值,因此必须使用#set来处理返回值。 (否则它会显示在结果文本中)。
显示
As of Velocity 1.6, optional or named parameters are not supported. There was a recent patch submitted with this feature so we might see it available in a future release.
In the meantime, consider passing in a list or a map of values. For example you can pass in a map of params as follows (requires Velocity 1.5 or greater):
displays:
To handle optional parameters, use an #if within the macro to check for the parameter. Adding new elements to the map is a little messy. Since the Java method "put" returns a value, you have to use #set to dispose of the return value. (Otherwise it's displayed in the resulting text).
displays
这是一个 Velocity 宏,它接受两个参数、一个颜色和一个对象列表:
然后您可以按以下方式使用该宏: :
请在此处查看完整文档: Velocity 替代文档
Here is a Velocity macro that takes two arguments, a color and a list of objects:
Then you can use the macro in this way: :
See full documentation here : Velocity alternative documentation