我正在使用LinkedIn fork和Python'Ashes'實現下的dust.js模板。是否可以在不使用擴展/定製幫助程序的情況下限制dust.js中的循環?
在給定的情況下,我有一個數組中的15個元素。我只想循環前5個元素。
有沒有人知道如何在灰塵中構建模板來實現這一點,而無需編寫幫助程序 - 我想讓這些模板在JS和Python上以類似的方式工作。
我正在使用LinkedIn fork和Python'Ashes'實現下的dust.js模板。是否可以在不使用擴展/定製幫助程序的情況下限制dust.js中的循環?
在給定的情況下,我有一個數組中的15個元素。我只想循環前5個元素。
有沒有人知道如何在灰塵中構建模板來實現這一點,而無需編寫幫助程序 - 我想讓這些模板在JS和Python上以類似的方式工作。
你有幾個工具可供你使用,但是你在灰塵和灰燼之間保持交叉兼容的選擇將會強制妥協。
灰燼的dust-helpers
中有一些基本的邏輯助手可用,比如{@eq}
和{@lt}
,所以我假設你也可以爲Dust導入該庫。
灰塵,做最簡單的方法,這將是:
{#items}
{@lt key=$idx value=5}{! output the item info !}{/lt}
{/items}
灰塵會遍歷整個列表,但只會輸出項目與指數小於5
灰燼,如你已經從your opened issue看過,不支持$idx
,但只有助手形式爲{@idx/}
- 並且你不能在另一個助手如{@lt}
內使用助手作爲比較器。
所以你的選擇是有限的。如果可以,最好的選擇是將index
屬性添加到數組中的對象。但願這是因爲像那樣簡單:
return items.map((item, idx) => { item.idx = idx; return item });
然後,你可以寫相同的模板同上,但使用該密鑰對你item
:
{#items}
{@lt key=idx value=5}{! item info woooo !}{/lt}
{/items}
如果你沒有API訪問,則下-best選項可能使用Ashes支持的部分上下文。
{> itemTemplate:item[0] /}
{> itemTemplate:item[1] /}
{> itemTemplate:item[2] /}
{> itemTemplate:item[3] /}
{> itemTemplate:item[4] /}
在此示例中,partial的上下文一次將設置爲一個項目。比粘貼五次循環的內容要簡單得多。
謝謝。我認爲最簡單的解決方案是修補「$ idx」,然後使用「@ lt」。我之前已經提交了一些補丁,所以這可能是最好的選擇。我需要限制數組的數據源太多,只有少數幾個模板,因此添加'.idx'屬性實際上需要大量的工作和單元測試。 –