我有一个模板,它在不同的地方使用相同的多值属性。我经常发现自己处于一种情况,我想在将模板应用于各个值之前过滤该属性。
我可以这样做:
<#col:{c|<if(cond)><# c.Attribute2 #><endif>};separator=\",\"#>
但这不是我想要的,因为输出中有分隔符分隔“跳过”条目,如:
2,4 ,,, 6,,4,5 ,,
我可以将其修改为
<#col:{c|<if(c.Attribute1)><# c.Attribute2 #>,<endif>};separator=\"\"#>
这几乎没问题,但是我在最后一个数字之后得到一个额外的分隔符,有时无关紧要(通常当分隔符是空格时),但有时会这样:
2,4,6,4,5,
我有时会这样做:
<#first(col):{c|<if(cond)><# c.Attribute2 #><endif>};separator=\"\"#>
<#rest(col):{c|<if(cond)>,<# c.Attribute2 #><endif>};separator=\"\"#>
但是如果第一个成员不满足条件,这种方法会失败,那么在开头就有一个额外的分隔符:
,2,4,6,4,5
有人可以给我一个更好的解决方案吗?
答案 0 :(得分:1)
首先,我要指出,我认为您正在尝试在模板中执行逻辑操作。每当你听到“根据某些条件根据数据过滤我的列表”之类的事情时,可能是时候在模型中计算过滤后的列表然后将其推入。这就是说这样的事情可能会在我们首先过滤列表的地方工作:
<col:{c | <if(c.cond)>c<endif>}:{c2 | <c2.c.attribute>}>
c2.c从第一个应用程序
访问c参数答案 1 :(得分:0)
“ANTLR Guy”的答案在我的案例中没有帮助,我找到了另一种解决方法。见Filter out empty strings in ST4