是否可以在不使用扩展/自定义助手的情况下限制dust.js中的循环?

时间:2015-06-23 23:41:22

标签: dust.js

我在LinkedIn fork和Python' Ashes'下使用dust.js模板。实施

在给定的情况下,我在数组中有15个元素。我想只遍历前5个元素。

有没有人知道在没有编写帮助程序的情况下在灰尘中构建模板的方法 - 我希望让模板在JS和Python上保持类似的工作。

1 个答案:

答案 0 :(得分:1)

您可以使用一些工具,但是您在Dust和Ashes之间保持交叉比较的选择将会导致妥协。

Ashes有dust-helpers中提供的一些基本逻辑助手,例如{@eq}{@lt},所以我假设您也可以为Dust导入该库。< / p>

在Dust中,最简单的方法是:

{#items}
  {@lt key=$idx value=5}{! output the item info !}{/lt}
{/items}

Dust会遍历整个列表,但只会输出索引小于5的项目。

Ashes,正如您从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访问权限,那么下一个最佳选项可能是使用Ashes支持的部分上下文。

{> itemTemplate:item[0] /}
{> itemTemplate:item[1] /}
{> itemTemplate:item[2] /}
{> itemTemplate:item[3] /}
{> itemTemplate:item[4] /}

在此示例中,partial的上下文将一次设置为一个项目。比粘贴循环内容五次简洁得多。