如何将 `#evaluate` 的结果赋给一个变量?
How to assign the result of `#evaluate` to a variable?
上下文:
在 XWiki 站点内,我大量使用速度模板来具有对象的特定表示。在一个特定的模板中,我需要能够有一个间接级别来允许对某些字段进行特殊处理。我设法将公式放入一个变量中并在渲染时对其求值。
我当前的(简化)代码是:
#set($special = { 'field1': 'F1: $pageDoc.display("field1") - F2: $pageDoc.display("field2")',
'field2': '' }
...
#foreach($field in $fields):
#if($special.contains($field))
#if("$special[$field]" != "")
<p>#evaluate($special[$field])</p>
#end
#else
<p>$pageDoc.display($field)</p>
#end
#end
事实上,此示例代码一行显示一个字段列表,而其中一些(特殊 字段)连续显示 2 个($pageDoc.display($field)
是一个 XWiki 习语,用于显示从页面中包含的对象获取可显示值)
问题:
对于不同的渲染引擎,我现在需要将这些行传递给引擎:
$engine.addLine($pageDoc.display($field))
但是$engine.addLine(#evaluate($special[$field]))
不能工作,因为#evaluate
直接输出它的评估而不是return任何东西。
问题
在 velocity 中有没有办法将 #evaluate
的结果存储在变量中?
在velocity中,#evaluate
只执行它的内容。观察到所有副作用,主要是输出,但无法返回任何内容。
诀窍的(第一部分)是让 #evaluate
评估 #set
,例如(注意这个不正确):
#evaluate(#set($resul = $special[$field]))
$engine.addLine($resul)
如果要在求值字符串中对特殊字符进行转义,则会出现问题,因为第一部分不应求值,而第二部分应求值,而且速度有相当奇怪的转义规则:#
和 $
应使用 \
转义,而 '
和 "
应加倍...
对于第二部分,它只给出:
#evaluate("\#set($resul= ""$special[$field]"")")
$engine.addLine($resul)
上下文:
在 XWiki 站点内,我大量使用速度模板来具有对象的特定表示。在一个特定的模板中,我需要能够有一个间接级别来允许对某些字段进行特殊处理。我设法将公式放入一个变量中并在渲染时对其求值。
我当前的(简化)代码是:
#set($special = { 'field1': 'F1: $pageDoc.display("field1") - F2: $pageDoc.display("field2")',
'field2': '' }
...
#foreach($field in $fields):
#if($special.contains($field))
#if("$special[$field]" != "")
<p>#evaluate($special[$field])</p>
#end
#else
<p>$pageDoc.display($field)</p>
#end
#end
事实上,此示例代码一行显示一个字段列表,而其中一些(特殊 字段)连续显示 2 个($pageDoc.display($field)
是一个 XWiki 习语,用于显示从页面中包含的对象获取可显示值)
问题:
对于不同的渲染引擎,我现在需要将这些行传递给引擎:
$engine.addLine($pageDoc.display($field))
但是$engine.addLine(#evaluate($special[$field]))
不能工作,因为#evaluate
直接输出它的评估而不是return任何东西。
问题
在 velocity 中有没有办法将 #evaluate
的结果存储在变量中?
在velocity中,#evaluate
只执行它的内容。观察到所有副作用,主要是输出,但无法返回任何内容。
诀窍的(第一部分)是让 #evaluate
评估 #set
,例如(注意这个不正确):
#evaluate(#set($resul = $special[$field]))
$engine.addLine($resul)
如果要在求值字符串中对特殊字符进行转义,则会出现问题,因为第一部分不应求值,而第二部分应求值,而且速度有相当奇怪的转义规则:#
和 $
应使用 \
转义,而 '
和 "
应加倍...
对于第二部分,它只给出:
#evaluate("\#set($resul= ""$special[$field]"")")
$engine.addLine($resul)