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

Is it possible to limit a loop in dust.js without using extensions / custom helpers?

我正在使用 LinkedIn 分支下的 dust.js 模板和 Python 'Ashes' 实施。

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

有谁知道一种无需编写帮助程序即可在 dust 中构建模板以实现此目的的方法——我想让模板在 JS 和 Python.

上的工作方式类似

您有一些可用的工具,但是您在 Dust 和 Ashes 之间保持交叉兼容的选项将迫使妥协。

Ashes 有一些在 dust-helpers 中可用的基本逻辑助手,例如 {@eq}{@lt},所以我假设您也可以为 Dust 导入该库.

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

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

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

Ashes,正如你从your opened issue看到的那样,不支持$idx,只支持helper形式{@idx/}--而且你不能使用helpers作为比较器在另一个助手里面,比如 {@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] /}

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