2012-11-10 84 views
0

我有一個模板,它在各個地方使用相同的多值屬性。我經常發現自己處於一種情況,我想在將模板應用到各個值之前過濾屬性。在StringTemplate中過濾多值屬性

我可以這樣做:

<#col:{c|<if(cond)><# c.Attribute2 #><endif>};separator=\",\"#> 

但是這不是我想要的,因爲那時有輸出分離分離「跳過」條目,如:

2,4 ,,, 6,,4,5 ,,

我可以將它修改爲

<#col:{c|<if(c.Attribute1)><# c.Attribute2 #>,<endif>};separator=\"\"#> 

這幾乎是確定的,但我得到一個additio最後一個號碼,有時並不重要(通常是當隔膜是空白),但有時確實後最終分離:

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

這是v3嗎?嗯......也許在v3中它並沒有讓「空」的迭代值消失。 –

+0

我正在使用.NET 4.0.6.9004版 –

回答

1

首先,讓我指出我認爲您正在嘗試在您的模板中執行邏輯。任何時候當你聽到「根據某些基於數據的條件來過濾我的列表」的時候,可能是在模型中計算過濾列表然後推入它的時候了。也就是說,類似這樣的事情可能在我們先過濾列表的地方:

<col:{c | <if(c.cond)>c<endif>}:{c2 | <c2.c.attribute>}> 

c2.c訪問來自第一應用