是否可以在不使用扩展/自定义助手的情况下限制 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] /}
在此示例中,部分的上下文将一次设置为一个项目。比将循环内容粘贴五次要简洁得多。
我正在使用 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] /}
在此示例中,部分的上下文将一次设置为一个项目。比将循环内容粘贴五次要简洁得多。